[英]BackgroundWorker capture error
我一直在嘗試按照這個MSDN 示例 ,並使用下面的代碼。 但是,即使在SomeMethod()中發生錯誤, e.Error
在RunWorkerCompleted中也始終為null;
private void WorkerDoWork(object sender, DoWorkEventArgs e)
{
getMethod = SomeMethod();
}
private void Worker_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
var result = ModernDialog.ShowMessage("Error occurred.... " +
e.Result, "ErrorTitle", MessageBoxButton.OK);
}
else if (e.Cancelled)
{
}
Else
{
}
}
誰能看到我做錯了什么?
我可以通過執行以下操作來解決它,但我真的不明白為什么MSDN中的示例不適合我?
private void WorkerDoWork(object sender, DoWorkEventArgs e)
{
try
{
getMethod = SomeMethod();
}
catch(Exception ex)
{
e.Result = ex;
}
}
private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Result is Exception)
{
var result = ModernDialog.ShowMessage("Error occurred.... " + e.Result, "ErrorTitle", MessageBoxButton.OK);
}
//etc
}
此外,使用第二種方法我無法從e.Result訪問.Message。 例如,在WorkerDoWork中,我可以使用ex.Message
編輯:我已設置工作人員創建它自己的錯誤,我仍然得到e.Error == null。 顯示的變量有點模糊,因為CTRL + PrtSc使其淡入淡出
我認為問題是emailWorkerDoWork()
空異常塊。 如果結果是異常,則無法捕獲后台工作程序中的異常。
所以像這樣的東西應該給你想要的結果:
private void emailWorkerDoWork(object sender, DoWorkEventArgs e)
{
int value = 1 / int.Parse("0");
}
我發現了另一個答案SO,確認我的懷疑,並提供一個參考MSFT 這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.