我在 VS2010 C# 中遇到了一个非常奇怪的情况。我正在使用 WCF PubSub 框架,并通过 netTcpBinding 进行回调。奇怪的是,在我的大型解决方案中的一个代码块中,抛出了一个异常(我完全期望并正在编码),但调试器停止显示抛出的异常,就好像没有 try 或 catch 一样。现在,当我在 VS 外部将应用程序作为 .exe 运行时,程序不会崩溃,并且会相应地处理异常。更奇怪的是,当我在一个新的空白解决方案中创建这个应用程序的轻量级版本时,在 Debug模式下 VS 中捕获了异常,但是当我再次将这个相同的轻量级项目添加到原始大型项目中时,异常没有被捕获。这是代码块,尽管我认为问题与 VS 中此解决方案的设置有关,但这是我唯一的猜测。
基本上,当客户端意外关闭并且服务尝试发送到故障客户端/订阅者时,catch 将处理此问题并从列表中删除订阅者。 _subscribers 列表是静态只读列表。我尝试过使服务成为单例,而不是在列表中使用 static 关键字,但这似乎没有什么区别。由于显而易见的原因,我无法压缩并发布该解决方案所在的整个解决方案。
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);
}
}
);
}
最佳答案
我会查看您的异常(exception)
设置。我会考虑用以下更清晰的逻辑替换:
try
{
if (client != null && client.State == CommunicationState.Opened)
action(subscriber);
}
finally
{
Unsubscribe(subscriber);
}
关于c# - Try/Catch 在 VS 2010 中未捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6413116/