簡體   English   中英

BackgroundWorker不處理異常

[英]BackgroundWorker doesn't handle exception

我真的已經閱讀了Stackoverflow上的所有其他類似線程。 對我沒有任何幫助...我拋出“ Exception”類型的異常,但我無法處理該異常。

我已經在DoWork Progress中的CompletedEvent中進行了嘗試(使用try / catch,e.error...。)

void bgGetResponse_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Error != null)
    {
        MessageBox.Show(e.Error.Message);
        ConvertByte(myFile);
        myFile= null;
    }
}

void bgGetResponse_DoWork(object sender, DoWorkEventArgs e)
{
    byte[] test= new byte[] { 1, 1, 0, 1, 1};
    //Here the error occured (just with  throw new Exception("error"))
    //The method only throws an exception (for test purposes)
    testResponse= _configManager.GetResponse(test, 0);
}

GetResponse(...)
{

   throw new Exception("..!");

}

有任何想法嗎?

感謝您的努力

我通常只是在工作方法中將其捕獲並為其設置結果。

private void BGW_DoWork(object sender, DoWorkEventArgs e)
{
    ...
}
catch (Exception ex)
{
    e.Result = ex;
}

然后查看Completed事件,

私人無效BGW_RunWorkerCompleted(對象發送者,RunWorkerCompletedEventArgs e){this.Cursor = Cursors.Default;

try
{
    Exception ex = e.Result as Exception;
    if (null != ex)
        throw ex;

...

如果通過“無法處理”異常意味着您不能使用catch ,那就是對的。 您只使用Error屬性。 您可以將其“拋出”在Completed事件處理程序中; 但隨后您的堆疊框架將有所不同。

例如:

try
{
    if(e.Error != null) throw(e.Error)
    // handle success case
}
catch(MyException exception)
{
    // handle specific error.
}

BackgroundWorkers DoWork函數中發生的任何未處理的異常都將導致工作程序激發RunWorkerCompleted,其中事件參數將包含該錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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