練習1: 記錄異常信息
通過本練習,將會在一個沒有異常處理的應用程序中使用異常處理應用程序塊添加本地和全局的異常處理,並記錄到Windows事件日志中。
第一步
打開Puzzler.sln 項目,默認的安裝路徑應該為C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Exception Handling\exercises\ex01,並編譯。
第二步 回顧應用程序
選擇Debug | Start Debugging菜單命令運行應用程序,當前應用程序並沒有出現異常信息。當嘗試增加一個帶有數字的單詞(在文本框中輸入“abc123”並單擊Add Word按鈕)到目錄中時,將會出現一個未處理的異常,調試將會中斷。
選擇Debug | Stop Debugging菜單命令退出應用程序並返回Visual Studio。
第三步 增加Try/Catch異常處理
1.選擇PuzzlerUI項目,並選擇Project | Add Reference …菜單命令,選擇Browse項並添加如下程序集。
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.dll
默認的安裝位置為C:\Program Files\Microsoft Enterprise Library January 2006\bin。
2.在解決方案管理器中選擇Puzzler.cs文件,並選擇View | Code菜單命令,添加如下命名空間。
using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling;
3.在btnAddWord_Click方法中添加如下代碼,在調用AddWord 和SetError時添加try/catch區。
private void btnAddWord_Click(object sender, System.EventArgs e)
{
try
{
// TODO: Handle exceptions
PuzzlerService.Dictionary.AddWord(txtWordToCheck.Text);
errorProvider1.SetError(txtWordToCheck, "");
}
catch (Exception ex)
{
bool rethrow = ExceptionPolicy.HandleException(ex, "UI Policy");
if (rethrow)
throw;
MessageBox.Show(string.Format(
"Failed to add word {0}, please contact support.",
txtWordToCheck.Text));
}
}
注意這裡使用throw語句非常重要,而不能使用throw ex。如果使用throw ex將在重新拋出異常點對異常信息重新進行包裝,這樣達不到預期的效果。