[英]C# BackgroundWorker blocking on Database call in DoWork handler
我正在嘗試遵循“從多線程過程返回值”標題下列出的 BackgroundWorker 示例http://msdn.microsoft.com/en-us/library/wkays279.aspx
我在 BackgroundWorker 的 DoWork 事件處理程序中對數據庫進行了耗時的調用。 我希望一旦我調用 BackgroundWorkerAsync(object),該調用將在后台發生,並且不會阻止應用程序的 rest 執行。 問題是這不會發生。 整個應用程序鎖定並等待數據庫調用返回。 一旦它返回,應用程序就會再次響應。
這是我的代碼
//initialization in a method.
Worker.DoWork += new DoWorkEventHandler(Worker_DoWork);
Worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Worker_RunWorkerCompleted);
private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
Retriever temp = (Retriever)e.Argument;
e.Result = temp.RetrieveLongDBCallThatReturnsADataSet() //App blocks until done.
}
private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
System.Data.DataSet result = (System.Data.DataSet)e.Result;
//Do stuff with the DataSet.
}
public void Retrieve(object arg1, object arg2, object arg3)
{
Retriever temp = new Retriever();
InitializeBackgroundWorker(); //wire up events
temp.Prop1 = arg1;
temp.Prop2 = arg2;
temp.Prop3 = arg3;
Worker.RunWorkerAsync(temp);
//Code that is expected to start executing, but instead blocks until temp.RetrieveLongDBCallThatReturnsADataSet() finishes.
}
誰能看到我在這里缺少的東西? 我通過調用 WebService 做了同樣的事情,這似乎工作正常。
這不應該發生,除非:
在異步調用DoWork
之后,您正在等待下一行的數據庫結果(或阻塞 UI 線程的內容)。
在調用RunWorkerAsync
后在下一行放置一個Break Point
,您應該立即獲得流程(或將該代碼添加到您的問題中)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.