如果一個方法執行過程中可能出現錯誤,但又不好直接重復執行這一段代碼更不願意中斷執行。這時候可以選擇人工參與的方式,就像安裝程序的時候找不到文件,可以讓你選擇文件,不正確仍可選擇是否繼續。
本人在網上搜索了一下,發現沒有相關的文章。所以自己玩了玩,方法比較差不過效果不錯。
方法就是彈出對話框,給交互者處理。見圖

彈出對話框需要引用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;

}

}

}