2014-12-26 53 views
-1

我想從catch塊中引發一個事件,基本上我有一個類,在其中我做了一些處理,如果它引發異常,我需要從調用方法知道這一點。由於這個解決方案的分佈式特性被記錄,拋出並以不同的方式處理,因此我沒有辦法將異常冒泡到表面,因此無法知道該過程從調用方法失敗,我試圖提升來自finally塊的事件,也嘗試傳遞一個布爾變量作爲ref並將其設置爲false在catch中,但它也沒有工作。下面是什麼,我試圖做一個簡化版本:從catch塊內部提高事件

static void Main(string[] args) 
    { 
     var error = false; 

     var demo = new Demo(); 

     ProcessThis(demo, 0); 

     demo.ErrorEvent +=() => error = true; 

     Console.WriteLine(error.ToString()); 

     Console.ReadKey(); 
    } 

    private static void ProcessThis(Demo demo, int val) 
    { 
     try 
     { 
      var result = 10/val; 
     } 
     catch (Exception) 
     { 
      Console.WriteLine("error"); 

      demo.RaiseErrorEvent(); 

      throw; 
     } 
    } 

    public class Demo 
    { 
    public event ErrorDelegate ErrorEvent; 

    public delegate void ErrorDelegate(); 

    public void RaiseErrorEvent() 
    { 
     if (this.ErrorEvent != null) 
     { 
      this.ErrorEvent(); 
     } 
    } 
    } 
+2

您正在訂閱事件* *您已經調用了'ProcessThis' ... –

回答

3

你需要你打電話給你方法前將事件處理程序:

demo.ErrorEvent +=() => error = true; 
ProcessThis(demo, 0); 

這樣還是不行,因爲你正在使用throw;。您需要在Main方法中發現異常。