2014-01-30 30 views
1

我想弄清楚一種方法來捕獲由FileSystemWatcher引發的異常,這些似乎是隨機發生的,因爲我從我的軟件的崩潰報告日誌中已經注意到。這次事故並不頻繁,因爲它僅發生在上個月的兩次,但令人討厭,我很想修復它。有問題的例外似乎與其路徑中具有無效字符的文件有關。我不確定情況是否如此,或者提出的事件是否有問題。到目前爲止,我所知道的是異常的堆棧跟蹤:捕獲由FileSystemWatcher偵聽器線程拋出的異常

Top-level Exception 
Type:  System.ArgumentException 
Message:  Illegal characters in path. 
Source:  mscorlib 

    Stack Trace: 
    at System.IO.Path.GetFileName(String path) 

    at System.IO.FileSystemWatcher.MatchPattern(String relativePath) 

    at System.IO.FileSystemWatcher.NotifyFileSystemEventArgs(Int32 action, String name) 

    at System.IO.FileSystemWatcher.CompletionStatusChanged(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* overlappedPointer) 

    at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 

從堆棧跟蹤很顯然,該異常升高回調事件到我的應用程序之前,聽者的執行範圍內提出。我想知道是否有無意中發現這種異常並繼續執行,而忽視了這一事件。

我試圖封裝我守望回調的身體與try/catch塊,但似乎從來沒有執行到達回調和它真的令人沮喪,因爲我現在開始認爲它是在.NET Framework中的錯誤

+0

是它在unhandledexception引發的事件? –

+0

完整路徑不能包含以下字符:「< > | –

+0

@SimonWhitehead是的,我就是這麼做的。 –

回答

0

您是否嘗試過註冊OnError事件?

http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.onerror%28v=vs.110%29.aspx

編輯:

剩下的唯一的事情就是ThreadException和UnhandledException:

// Add handler to handle the exception raised by main threads 
    Application.ThreadException += 
    new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); 

    // Add handler to handle the exception raised by additional threads 
    AppDomain.CurrentDomain.UnhandledException += 
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 
+0

是的,它已經註冊了 –

+0

我不確定你會收到一個ThreadException,但你有機會收到UnhandledException 。在處理程序中,你可能不得不停止並重新啓動你的文件監視器(這個異常可能會破壞它) –

+0

這就是我第一次發現異常的原因。應用程序有很多組件,在這裏過濾異常是不實際的。 –

相關問題