假設存在以下情況。表單上有一個按鈕,點擊後可啓動後臺工作人員。在RunWorkerCompleted事件處理程序中,有一段代碼會引發unhandeled異常。該表單從Application.Run方法開始。BackgroundWorker_RunWorkerCompleted中的TargetInvocationException
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
throw new Exception();
}
private void button_Click(object sender, EventArgs e)
{
backgroundWorker.RunWorkerAsync();
}
}
的問題是,在Application.Run調用Visual Studio的休息,而不是在FormMain.backgroundWorker_RunWorkerCompleted法「拋出新的異常()」。除了使用TargetInvocationException封裝真正的異常,並且調用堆棧減少爲Program.Main方法和導致異常的代碼因此無法檢查。
如何防止包裝?我在做一些本質上錯誤的事情嗎?
從TargetInvocationException提供的調用堆棧判斷,有很多調用方法堆積起來,對於我對消息循環的基本理解以及對線程的基本理解不夠深入。
編輯: 我知道在TargetInvocationException中存在InnerException屬性,並且可以通過查找來追蹤錯誤,但這不是問題。問題是如何在使用TargetInvocationException封裝真正的異常之前停止Visal Studio,這樣我就可以使用VS IDE提供的所有那些很好的調試功能。
如果發生'TargetInvocationException''InnerException'屬性存在基礎異常。 – Damith
@Damith我知道,那不是我要問的。我編輯了這個問題來防止這種答案。 –