我以爲我可以在我的項目中捕獲另一個類拋出的異常,但我一定是做錯了。在第一類中,我周圍我打電話給其他類用try/catch塊:另一個類拋出的catch異常?
try
{
ImportPowerPoint.CreateTitle(textBoxPpt.Text, textBoxPkg.Text);
}
catch (FormatException ex)
{
MessageBox.Show(ex.Message, "ERROR",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
}
在第二類中,這就是我拋出異常:
if (!_layoutMap[(int)Layouts.A].ContainsValue(Fields.Title))
throw new FormatException("Standard (A) Layout does not contain a title.");
if (!_layoutMap[(int)Layouts.A].ContainsValue(Fields.Txt1))
throw new FormatException("Standard (A) Layout does not contain a txt1.");
if (!_layoutMap[(int)Layouts.A].ContainsValue(Fields.Prompt))
throw new FormatException("Standard (A) Layout does not contain a prompt.");
當我運行程序時,它會立即中斷引發異常的地方,而不是顯示我在try/catch塊中定義的錯誤窗口。我沒有正確處理這個try/catch嗎?
爲了澄清,我強制通過刪除我解析的PowerPoint中的某些部分來發生異常。例如,當程序失敗時,因爲我刪除了Title
字段,所拋出的異常的類型是FormatException。調用類中的我的catch
不應該處理這個問題嗎?
編輯:我想我可能已經找到了導致這種情況發生的原因。拋出的異常在另一個線程中。所以,因爲它在另一個線程中,這是否意味着這就是爲什麼我的try/catch沒有捕獲異常?
只是爲了澄清你是說'ImportPowerPoint.CreateTitle'方法拋出沒有被捕獲的異常?因爲它看起來應該捕獲所有'FormatException'並顯示你的消息框。 – Chris
實際上,這可能很重要,實際的異常正在從'ImportPowerPoint.CreateTitle'調用的另一個類中拋出。我認爲,無論異常發生在何處,無論是在立即調用的類中,還是從該類中調用的類,如果這是合理的,調用類將捕獲該異常。 – Kevin
如果該方法調用其他類的東西,那麼catch應該仍然可以捕獲。代碼在其他類中的事實並不是問題(並且實際上通常是預料之中的,因爲您經常捕獲框架類中的異常而不是您自己的代碼)。你肯定在這段代碼中(並且它不會從代碼中的其他地方拋出異常)? – Chris