我是新來的使用事件處理程序和背景工作者,所以我可能會錯過這裏完全明顯的東西。不過,我一直試圖解決這個問題兩天,所以我想我不妨看看有什麼人說。Backgroundworker總是忙碌
我有一個名爲SqlExpressDownloader的背景工作器。它開始在我的程序開始時運行,其餘的工作運行,然後在繼續之前它應該等待SqlExpressDownloader_DoWork()
方法中的操作完成。唯一的問題是,由於某種原因,每當我做while(SqlExpressDownloader.IsBusy)
,它總是響應忙碌,因此將永遠等待。
事件處理程序的代碼是在這裏:
private void SqlExpressDownloader_DoWork(object sender, DoWorkEventArgs e)
{
string sSource = string.Format("{0}\\{1}", Paths.Settings_Common, "sqlexpr_x64_enu.exe");
Debug.WriteLine(sSource);
Debug.WriteLine("http://www.elexioamp.com/Install/redistributables/sql2008r2express/sqlexpr_x64_enu.exe");
if (!System.IO.File.Exists(sSource))
{
WebClient oWebClient = new WebClient();
oWebClient.DownloadProgressChanged += DownloadProgressChanged;
oWebClient.DownloadDataCompleted += DownloadComplete;
oWebClient.DownloadFileAsync(new System.Uri("http://www.elexioamp.com/Install/redistributables/sql2008r2express/sqlexpr_x64_enu.exe"), sSource);
while (oWebClient.IsBusy)
{
Thread.Sleep(100);
}
e.Result = "";
DownloadFinished = true;
}
}
我看過的代碼,都看過了完成此方法。我甚至在DownloadFinished = true
之後加了return
,但它仍然很忙。我想知道的是如何讓背景工作者不忙。
編輯 事件在構造函數中添加的所有如下所示:
SqlExpressDownloader = new BackgroundWorker();
SqlExpressDownloader.DoWork += new DoWorkEventHandler(this.SqlExpressDownloader_DoWork);
SqlExpressDownloader.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.SqlExpressDownloader_RunWorkerCompleted);
的RunWorkerCompleteEventHandler
看起來是這樣的:
private void SqlExpressDownloader_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
Debug.WriteLine("The actions are complete.");
}
else
{
Debug.WriteLine("Error in completed work.");
}
}
但是,當我最後調試它,它沒有實際上觸發。
你是怎麼開始工作的? – Patrick
在主要方法中,我使用'SqlExpressDownloader.RunWorkerAsync()'開始它。 – ijb109
檢查工作者的IsBusy時,是否使用了類似於方法主體中的while循環?方法完成後,RunWorkerCompleted事件是否觸發? – Patrick