2014-01-30 33 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

这就是我第一次发现异常的原因。应用程序有很多组件,在这里过滤异常是不实际的。 –