告诉构造函数我正在使用task而不告诉是哪个方法

本文关键字:方法 构造函数 task | 更新日期: 2023-09-27 18:06:10

我想在构造函数中定义一个任务(或线程),但是在button-event中使用它的方法启动任务(或线程)。

所以我想这样写:

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!");
    }
}

告诉构造函数我正在使用task而不告诉是哪个方法

您可以像这样使用构造函数:

Task SendTask = new Task(new Action(SendFile));

和在事件处理程序中简单地启动它,检查它的状态:

private void SendFilesButton_Click(object sender, EventArgs e)
{
    if (SendTask.Status == TaskStatus.Created)
    {
        SendTask.Start();
        SendFilesButton.Enabled = false;
    }
}

你应该避免lock (this)结构,因为它会锁定你的UI表单。