我对.net还是一个新手,我仍然在努力理解很多事情,现在我正在尝试完成相对简单的事情,但是我每次都失败了,我想在其中添加一个线程在我的程序中,此线程将负责执行对Web服务器的上载操作,并通过更新ListView使我的程序保持响应状态,以向用户提供操作的反馈,在此用户可以查看文件上载的所有状态。

我不知道如何将该线程放入程序中以使其具有响应能力,到目前为止,我还没有找到任何示例,并且我正在尝试寻找一些示例,向我展示如何使用Thread和WinForms。

最佳答案

您将要使用的是BackgroundWorker。它是专门为此目的而设计的。

private void button1_Click(object sender, EventArgs e)
{
    BackgroundWorker bgw = new BackgroundWorker();

    bgw.DoWork += (_, args) => LongRunningTask(bgw);
    bgw.WorkerReportsProgress = true;
    bgw.ProgressChanged += (_, args) =>
    {
        textbox1.Text = args.ProgressPercentage.ToString();
    };
    bgw.RunWorkerCompleted += bgw_RunWorkerCompleted;

    bgw.RunWorkerAsync();
}

private void LongRunningTask(BackgroundWorker bgw)
{
    for (int i = 0; i < 10; i++)
    {
        Thread.Sleep(1000);//placeholder for real work
        bgw.ReportProgress(i);
    }
}

private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    //do stuff when completed.
}

需要注意的关键点是DoWork事件在后台线程中运行,而其他事件都在UI线程中运行。 BackgroundWorkder类负责确保全部独立。

10-04 22:17