![](/img/trans.png)
[英]WPF - error handling with asynchronous command using BackgroundWorker
[英]Error on using backgroundworker
//這是我的代碼
private void btnGenSumm_Click(object sender, EventArgs e)
{
if (backgroundWorker1.IsBusy != true)
{
btnGenSumm.Enabled = false;
btnExpSum.Enabled = false;
btnClose.Enabled = false;
pBox1.Visible = true;
backgroundWorker1.RunWorkerAsync();
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
loadSummSales(); // this is the process
System.Threading.Thread.Sleep(50);
}
private void backgroundWorker1_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
pBox1.Visible = false;
}
第一次單擊時執行該過程沒有錯誤,但是當我再次嘗試單擊命令按鈕(btnGenSumm)以重復該過程時,出現錯誤“在執行createhandle時不能調用值處理”。,請幫助我有了這個。
在開始執行任務之前,我總是會創建一個新的工作人員。 這樣可以避免這些問題。
private void btnGenSumm_Click(object sender, EventArgs e)
{
// WorkerFactory creates your worker and hooks up the DoWork
// and RunWorkerCompleted events
var backgroundWorker1 = WorkerFactory();
// ...
// Disable access to this Click event in the UI here
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_RunWorkerCompleted(
object sender,
RunWorkerCompletedEventArgs e)
{
// Re-enable access to the Click event in the UI here
}
使用這種方法,無法在工作進程運行時訪問該工作進程,並且可以保證,只要用戶單擊該按鈕,最后一個工作進程IsBusy
完成,並且不會出現討厭的IsBusy
軟糖。
更新
明確地, WorkerFactory
做這樣的事情
private BackgroundWorker WorkerFactory()
{
var worker = new BackgroundWorker();
worker.DoWork += backgroundWorker1_DoWork;
worker.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted;
return worker;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.