2012-05-15 129 views
3

我创建了运行多个任务的.net c#windows服务。我在其中包含了异常处理,但我想设置一个全局处理程序来捕获windows服务中未处理的异常,我该怎么做?Windows服务中未处理的异常

回答

5

我包含在它的异常处理,但我想建立一个全球性的处理程序来捕获未处理的窗口服务异常

可能使用AppDomain.UnhandledException。然而,在你的情况下,你对服务的整个调用可以被封装在try/catch块中。既然你没有提供你打算处理这个未处理异常的细节,我认为在这种情况下你的正确路径是让服务崩溃

try 
{ 
    MainCallToYourService(); 
} 
catch (Exception) 
{ 
    //it's probably too late to do anything useful here, try to log and die 
} 

但请记住,在这样做的问题是,在很多情况下,你的应用程序的状态是由腐败引发此事件的时间。你最好的选择是尝试并记录下来,然后离开。

+0

这是正确的答案。许多人得到异常处理错误。捕捉无法处理的异常绝对没有意义。当你得到一个未处理的全局异常时,你能做的最好的事情就是崩溃(事实上,事实上已经发生了)。如果您只想记录它,请使用'AppDomain.UnhandledException',如您所述。 –

+1

我明白这一点,但我想要做的就是能够记录异常,以便对其进行跟踪。我尝试了AppDomain.UnhandledException,并且在创建服务时设置了事件处理程序,但事件永远不会被触发。任何想法为什么? – amateur

+0

@amateur:你是在创建其他线程,还是只有一个单线程服务? –