[請,如果你發現它不夠好編輯標題]如何檢測特定代碼行上出現的錯誤?
我有代碼觸發XSL變換:
objMemoryStream = new MemoryStream();
xslTransform = new XslCompiledTransform();
xpathXmlOrig = new XPathDocument("E:\\xslt error\\Simulation_of_error\\input.xml");
xslSettings = new XsltSettings();
xslSettings.EnableScript = true;
xslTransform.Load(strXmlQueryTransformPath, xslSettings, new XmlUrlResolver());
xslTransform.Transform(xpathXmlOrig, null, objMemoryStream);
objMemoryStream.Position = 0;
StreamReader objStreamReader = new StreamReader(objMemoryStream);
方法xslTransform.Load(strXmlQueryTransformPath, xslSettings, new XmlUrlResolver());
是受害者,其失敗有時由於一些時間沒問題。
我想檢測此代碼行的失敗並再次執行,直到它成功執行!
我試圖用「嘗試捕捉和WHILE方法」:
bool flag = true;
do
{
try
{
xslTransform.Load(strXmlQueryTransformPath, xslSettings, new XmlUrlResolver());
flag = false;
}
catch
{
flag = true;
}
} while (flag);
但問題是,「是越來越記錄在日誌文件中的錯誤」,那好。整個代碼是在一個更多的嘗試聲明,我懷疑是寫入日誌。這是我不想要的......我不希望最終用戶知道此代碼行的失敗。
有沒有辦法完成它?
錯誤的出現完全是隨機的。第一次失敗時,我嘗試重新觸發代碼,這可能會導致成功轉換(在下次嘗試時)!這就是爲什麼我得出結論:Load()方法的回憶可以解決這個問題。
您可以發佈您正在接收的確切例外嗎? 此外,你應該非常小心循環,直到成功,因爲你的程序將永遠不會退出這個循環。例如,如果該文件沒有找到,該怎麼辦?自行處理特定異常將是更好的途徑。 – 2010-05-18 17:15:39
該循環是一個等待發生的災難。添加一個Thread.Sleep超時和最大嘗試次數。 – aepheus 2010-05-18 17:24:09
此外,該try catch不會允許任何來自xslTransform.Load的錯誤傳播,因此您可能會吠叫錯誤的樹。無論如何,如果我們知道確切的錯誤,我們可能會多一點幫助。 – aepheus 2010-05-18 17:28:19