如果一個方法執行過程中可能出現錯誤,但又不好直接重復執行這一段代碼更不願意中斷執行。這時候可以選擇人工參與的方式,就像安裝程序的時候找不到文件,可以讓你選擇文件,不正確仍可選擇是否繼續。
本人在網上搜索了一下,發現沒有相關的文章。所以自己玩了玩,方法比較差不過效果不錯。
方法就是彈出對話框,給交互者處理。見圖
彈出對話框需要引用System.Windows.form程序集,有些類庫項目默認不引用。
所以我就另外建了個項目RetryDialog,生成單獨的dll。見代碼
namespace RetryDialog
...{
public class Dlg
...{
public enum XDialogResult
...{
Retry=DialogResult.Cancel,
Abort=DialogResult.Abort
}
public static XDialogResult Show(System.Exception ex)
...{
DialogResult r = new ThreadExceptionDialog(ex).ShowDialog();
if (r == DialogResult.Cancel)
...{
return XDialogResult.Retry;
}
else
return XDialogResult.Abort;
}
}
}
這裡使用了System.Windows.Form.THreadExceptionDialog系統對話框,點擊繼續按鈕返回值為DialogResult.Cancel。
下面是用戶交互的代碼
protected void LoadPageXml(System.Xml.XMLDocument doc, string url)
...{
RELOADXML:
try
...{
doc.LoadXML(m_httprequest.getPage(url));
}
catch (Exception ex)
...{
MySQLdb.dblog.SaveLog(string.Format("獲取XML數據失敗,url={0}", url));
if (RetryDialog.Dlg.Show(ex) == RetryDialog.Dlg.XDialogResult.Retry)
...{
MySQLdb.dblog.SaveLog("重試");
goto RELOADXML;
}
}
}