簡體   English   中英

BackgroundWorker捕獲錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM