2013-09-27 42 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