2010-09-28 156 views
0

在backgroundworker_DoWork()中分配工作在Winform應用程序中,我希望使用一個背景工作器(或者可以爲每個表單一個)在不同的事件上完成不同的任務。例如:搜索,在網格中加載數據,打開新表單,發送電子郵件,文件傳輸等。根據條件

如何在backgroundWorker_DoWork()和backgroundWorker_RunWorkerCompleted()事件中管理所有這些?

這樣做的最佳方式/最佳實踐是什麼?

回答

2

通常情況下,我結束了一個參數caling工人,像這樣:

backgroundWorker.RunWorkerAsync(<some argument here>); 

那麼你的DoWork方法內,你可以從e.Argument檢索論證,並根據論證是什麼,你知道你想用它做什麼。

如果你不需要其他任何參數,你可以用你需要的值進行枚舉,例如SearchLoad等,並將其傳入,然後檢查DoWork內部的值以選擇你想做。請記住,你必須拋棄在Dowork內部的枚舉,因爲e.Argument是一個對象。

關於RunWorkerCompleted,您可以使用DoWork中的值填充e.Result,並在RunWorkerCompleted方法中檢索它。

這是做到這一點的最佳方式,並且將一直保持線程安全。