Try / Catch не ловит исключение в VS 2010 - PullRequest
2 голосов
/ 20 июня 2011

У меня очень странное явление в VS2010 C #.Я использую платформу WCF PubSub с обратными вызовами через netTcpBinding.Странно, но в одном блоке кода в моем большом решении выдается исключение (что я полностью ожидаю и кодирую), но отладчик останавливается, показывая выбрасываемое исключение, как будто нет попытки или перехвата.Теперь, когда я запускаю приложение вне VS как просто .exe, программа не падает, и исключения обрабатываются соответствующим образом.Что еще более странно, когда я создал облегченную версию этого приложения в новом пустом решении, исключения отлавливаются в VS в режиме отладки, но когда я снова добавляю этот же облегченный проект в исходный большой проект, исключения не перехватываются,Вот блок кода, хотя я думаю, что проблема связана с настройками в VS для этого решения, это мое единственное предположение.

В основном, когда клиент неожиданно закрывается и служба пытается отправить всбойный клиент / подписчик, уловка справится с этим и просто удалит подписчика из списка.Список _subscribeers является статическим списком только для чтения.Я пытался сделать сервис синглтоном и не использовать статическое ключевое слово в списке, но, похоже, это не имеет значения.Я не могу заархивировать и опубликовать все решение, в котором оно находится по понятным причинам.

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 ]

2 голосов
/ 22 июня 2011

Ответ Хайнци выше исправил проблему, ее можно решить здесь:

http://stevesmithblog.com/blog/visual-studio-break-when-exception-thrown/

2 голосов
/ 20 июня 2011

Я бы посмотрел на ваши Exceptions настройки. Я хотел бы рассмотреть вопрос о замене следующей чистой логики:

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

           }
           finally
           {
             Unsubscribe(subscriber);
           }
...