2

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

我不知道如何将此 Thread 放入程序中以使其响应,到目前为止我找不到任何示例,我正在尝试找到一个小示例来向我展示 Thread 和 WinForms 的使用。

4

1 回答 1

3

您将要使用的是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班级负责确保一切都靠自己。

于 2012-11-07T17:36:37.853 回答