2011-06-20 64 views
2

我在VS2010 C#中出現了一個非常奇怪的情況。我正在使用一個WCF PubSub框架與netTcpBinding上的回調。奇怪的是,在我的大型解決方案中的一個代碼塊中拋出了一個異常(我完全期望並正在編碼),但調試器正在停止顯示拋出異常,就好像沒有嘗試或捕獲。現在當我在.exe之外運行應用程序時,程序不會崩潰,異常也會相應處理。更奇怪的是,當我在一個新的空白解決方案中創建這個應用程序的輕量級版本時,異常在調試模式下被捕獲到VS中,但是當我再次將這個輕量級項目添加到原始大型項目時,異常未被捕獲。這裏是代碼塊,但我認爲這個問題與VS中的設置有關,這是我唯一的猜測。在VS 2010中嘗試/捕捉未捕獲的異常

基本上,當一個客戶端意外關閉和服務試圖發送到客戶端故障/訂戶漁獲會處理這,只是從列表中刪除用戶。 _subscribers列表是靜態只讀列表。我嘗試過使用單例服務,而不是在列表中使用靜態關鍵字,但似乎沒有任何區別。由於顯而易見的原因,我無法壓縮併發布駐留的整個解決方案。

public void UpdateData(Action<T> action) 
{ 
_subscribers.ForEach(subscriber => 
      { 
       var client = subscriber as ICommunicationObject; 
       try 
       { 
       if (client != null && client.State == CommunicationState.Opened) 
        action(subscriber); 
       else 
        Unsubscribe(subscriber); 
       } 
       catch 
       { 
       Unsubscribe(subscriber); 
       } 
      } 
); 
} 
+2

也許你不小心激活該設置嗎? http://stevesmithblog.com/blog/visual-studio-break-when-exception-thrown/ – Heinzi

回答

2

我想看看你的Exceptions設置。我會考慮用下面的清潔邏輯替換:

  try 
      { 
      if (client != null && client.State == CommunicationState.Opened) 
       action(subscriber); 

      } 
      finally 
      { 
      Unsubscribe(subscriber); 
      } 
+0

謝謝你,我或許應該使用一個空的catch語句的最終替代。海因茨的鏈接解決了這個問題,不知道如何或何時設置了這個選項,但這是問題所在。謝謝! –