什么是Dowork()在后台工作者中究竟做了什么?

时间:2017-04-14 09:59:28

标签: wpf background worker

我有一个令人困惑的地方:在每个背景工作者的演示中。他们将Thread.Sleep();放在此方法中以模拟长时间的操作。但是,如果我有一个从数据库导入数据到datatable的操作,我调用了这个方法:importData()。然后我用它替换Thread.Sleep();。这意味着它将导入100次?谢谢你的回答。

 void worker_DoWork(object sender, DoWorkEventArgs e)
            {
                    for(int i = 0; i < 100; i++)
                    {
                            (sender as BackgroundWorker).ReportProgress(i);
                            Thread.Sleep(100);
                    }
            }

1 个答案:

答案 0 :(得分:0)

DoWork是后台工作者的主要事件。这意味着它必须在后台完成的工作。

如果您将ImportData()方法放在for-loop中,那么您的数据将被导入100次,或者您添加的任何变量而不是100。

但您不需要在for-loop中完成工作,只需跳过for-loop部分并执行ImportData()部分

来自MSDN的评论:

  

调用RunWorkerAsync方法时会引发此事件。这是   在哪里开始执行潜在操作   耗时的工作。

     

DoWork事件处理程序中的代码应定期检查   CancellationPending属性值,如果是,则中止操作   真正。发生这种情况时,您可以设置取消标志   System.ComponentModel.DoWorkEventArgs为true,以及Canceled标志   你的System.ComponentModel.RunWorkerCompletedEventArgs   RunWorkerCompleted事件处理程序将设置为true。