我有一个令人困惑的地方:在每个背景工作者的演示中。他们将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);
}
}
答案 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。