2017-04-14 47 views
0

我有一個混淆,那就是:在每個背景工作者的演示中。他們將Thread.Sleep();放在這個方法中來模擬長時間的操作。但是,如果我有從數據庫導入數據到數據表的操作,並且我調用了這個方法:importData()。我用它代替Thread.Sleep();。這意味着它將被導入100次?感謝您的回答。在後臺工作人員中,Dowork()究竟是幹什麼的?

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

回答

0

DoWork是背景工作者的主要事件。這意味着它必須在後臺完成的工作將在這種情況下完成。

如果你把你的ImportData()方法是在for-loop,然後是你的數據將被importet 100倍,或任何變量,你加100

代替但你並不需要做你的工作在for-loop,只跳過for-loop部分並做ImportData()部分來自MSDN

備註:

當你調用的RunWorkerAsync方法將引發此事件。這是開始執行潛在的 耗時工作的操作的 。

您在DoWork事件處理程序中的代碼應定期檢查 CancellationPending屬性值,並在 爲true時中止操作。發生這種情況時,可以將取消標誌 System.ComponentModel.DoWorkEventArgs設置爲true,並且 RunWorkerCompleted事件處理程序中的System.ComponentModel.RunWorkerCompletedEventArgs的取消標誌 將設置爲true。

+0

如果我不把它放在循環中。 (發送者爲BackgroundWorker).ReportProgress(i)?請向我解釋一下,我第一次面對它。 –

+0

@PhanThếKhương您必須爲自己提供的百分比。假設你正在做12個耗時的操作,那麼在每次操作後你必須提供100/12。如果只有一個操作,那麼它對百分比沒有意義。 –

+0

好的。現在我完全瞭解它:)非常感謝你。 –