2013-09-27 37 views
0

我正在使用一个Windows服务,我想在我的根方法中捕获所有内部异常。 在我的一个内部方法中,我使用了如下所示的try/catch块。发生错误时,该服务不会将错误消息返回给我的根方法。相反,它只是抛出一个错误,并停止在我的内部方法。如何捕获根方法中的所有内部异常?

如何将错误消息返回到我的根方法?

try 
{ 
    loadAdapterProperties(ref strAssemblyName, ref strTypeName, ref statusXML, 
     strAssignedTask, ref lastAdapter, ref entityTypeCode, ref adminID); 

    if (strAssemblyName == "" || strTypeName == "") 
    { 
     LogWriter.WriteTimedMessage("No adapters currently available, {0}", 
      strAssignedTask);       
     loopCondition = false; 
     break; 
    } 

    objHandle = Activator.CreateInstance(strAssemblyName, strTypeName); 
    objAdapter = (BaseGatesAdapter)objHandle.Unwrap(); 

    objAdapter.Load(strAssignedTask, statusXML, entityTypeCode, adminID); 
    objAdapter.Execute(); 
    LogWriter.WriteTimedMessage("Executed {0}", strAssemblyName); 
    if (lastAdapter == true) 
     loopCondition = false; 
} 
catch (System.Exception e) 
{ 
    loopCondition = false;      
    LogWriter.WriteTimedMessage("FAILED to execute {0}",strAssemblyName); 
    throw; 
} 
+2

你是什么意思的根方法和内部方法?代码是否超过根方法?内部方法是否是objAdapter.Execute()方法? 'objAdapter.Execute()'做了什么? –

+0

目前还不清楚你的意思,因为你的代码我明白try-catch块是在一个循环内('while'),但是如果你重新抛出异常,你的循环将会中断,所以只需评论'throw;'部分。 –

回答

1

您可能意思是您在运行应用程序时得到的错误消息指向内部方法。这意味着(很有可能)你没有在根级别进行try/catch。

这可能会很棘手 - 如果您在机器上安装了调试器,调试器会在您的主应用程序出现之前收到此“throw”通知。根据调试器的配置,它可能会暂停你的应用程序。看到这里就如何彻底关闭: Suppress first chance exceptions

下面是关于如何注册对线程级的异常事件的解释,所以你不必换的try/catch在所有的方法 How to catch ALL exceptions/crashes in a .NET app