2011-06-20 63 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语句的最终替代。海因茨的链接解决了这个问题,不知道如何或何时设置了这个选项,但这是问题所在。谢谢! –