-2
제 생성자에서 태스크 (또는 스레드)를 정의하고 싶지만 버튼 이벤트에서 해당 메소드로 태스크 (또는 스레드)를 시작하십시오.어떤 메소드를 알리지 않고 태스크를 사용하여 생성자에게 메 시지를 전달하십시오.
Task SendTask = Task.Factory.StartNew(());
private void SendFilesButton_Click(object sender, EventArgs e)
{
SendTask.Sendfiles();
}
내 방법 : 당신은 생성자를 사용할 수 있습니다
public void SendFiles()
{
try
{
tcpClient = tcpListener.AcceptTcpClient();
if (tcpClient.Connected)
{
using (StreamReader reader = new StreamReader("C:\\Users\\Chudnofsky\\Desktop\\Projekt\\Neu\\Messwerte.txt"))
{
lock (this)
{
string line;
line = reader.ReadLine() + Environment.NewLine;
stream = tcpClient.GetStream();
byte[] toSend = Encoding.ASCII.GetBytes(line);
stream.Write(toSend, 0, toSend.Length);
stream.Flush();
}
}
}
}
catch (Exception)
{
System.Windows.Forms.MessageBox.Show("Datei konnte nicht gelesen werden!");
}
}
작업을 관리하고 싶지만 정의하고 시작하기를 원할 것입니다.'var SendTask = new Task (Sendfiles); SendFilesButton_Click (개체 보낸 사람, EventArgs 전자) {SendTask.Start(); }'. 또한,'lock (this)'이 당신을 위해 작동하지 않을 수도 있습니다. 보통 각 태스크에 공통적 인 객체를 잠그고 싶습니다. 10 개의 작업으로 10 개의 다른 잠금을 얻을 수 있지만 각'SendFiles()'메소드 사이에 경합이 있다면 단지 하나의 잠금만을 원할 것입니다. – Quantic
'Task SendTask;를 수행하는 데있어 잘못된 점이 있습니다. 개인 무효 SendFilesButton_Click (개체 보낸 사람, EventArgs 전자) {SendTask = Task.Run (SendFiles); }'? –
@ScottChamberlain 버튼을 두 번 클릭했을 때의 동작은 두 경우 모두 완전히 다릅니다. – Servy