Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.17.162.247] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Можно не плодить, для этого можно использовать анонимный делигат:
static bool SaveCall(Func<bool> _func) { try { return _func(); } catch (System.Exception ex) { return false; } } Вызывать так: TestClass _testClient = new TestClass(); var _result = SaveCall(delegate() { _testClient.SameMethod0(); return true; }); |
Сообщ.
#17
,
|
|
|
maxim84_, вопрос был про метод с несколькими параметрами разных типов...
|
Сообщ.
#18
,
|
|
|
Цитата maxim84_, вопрос был про метод с несколькими параметрами разных типов... все тоже самое: public class TestData { public string Name { get; set; } } public class TestClass { public void SameMethod0() { throw new Exception(); } public TestData SameMethod1(string _arg, int _index) { Console.WriteLine("Call method 'SameMethod1'. Arg = {0}, Index={1}", _arg, _index); return new TestData() { Name = "From SameMethod" }; } } TestData _ReturnObject = null; string _argForSameMethod1 = "adsadsa"; _result = SaveCall(delegate() { _ReturnObject = _testClient.SameMethod1(_argForSameMethod1, 100); return true; }); |
Сообщ.
#19
,
|
|
|
А, ну отдельный класс возвращать, тогда да
|
Сообщ.
#20
,
|
|
|
Вообще-то это для демонстрации..
|
Сообщ.
#21
,
|
|
|
Как приду домой, попробую это
_result = SaveCall(delegate() { _ReturnObject = _testClient.SameMethod1(_argForSameMethod1, 100); return true; }); А просто засунуть весь метод Main/App_Startup в блок try/catch не вариант? Код вроде будет медленнее выполняться, верно? |
Сообщ.
#22
,
|
|
|
Всё через Try...Catch точно пускать не советую...
У клиента в классе Application вроде есть система отлова необработанных исключений, лучше её задействовать. |
Сообщ.
#23
,
|
|
|
я вообще не очень пойму проблему...Да, есть какой-то Wcf сервис, методы которого очевидно не безопасные. И есть некий внешний код, который юзает методы сервиса. Ну так может и обернуть этот клиент в безопасную обертку? тогда во внешнем коде не будут мозолить глаза try...catch...Хотя, куда без них ))
P.S. всеравно не пойму проблему |
Сообщ.
#24
,
|
|
|
Цитата maxim84_ @ Ну так может и обернуть этот клиент в безопасную обертку? То есть создать вспомогательный класс вроде этого public class Helper { private ServiceClient Client = new ServiceClient(); public bool Method1() { try { return Client.Method1(); } catch { //... } } } И так для каждого метода? Тоже не очень красивое решение. Цитата Spawn.NET @ У клиента в классе Application вроде есть система отлова необработанных исключений, лучше её задействовать. А вот это уже интересно. Добавлено Цитата maxim84_ @ всеравно не пойму проблему Если повсюду try-catch - уже раздражает. Так еще в блоке catch у меня строк 5 кода, так надо. Получается еще и много повторяющегося кода (вот эти 5 строчек будут повторяться десятки раз, я ж не холлоуворд сервис пишу) |
Сообщ.
#25
,
|
|
|
Цитата GoldenJoe @ А вот это уже интересно. http://msdn.microsoft.com/ru-ru/library/system.windows.forms.application.threadexception.aspx |
Сообщ.
#26
,
|
|
|
Spawn.NET, на эту статью уже натыкался. Только для Windows Forms. Я WPF юзаю, там этого нет. А мешать их вместе не рекомендуется.
Добавлено Цитата GoldenJoe @ _result = SaveCall(delegate() { _ReturnObject = _testClient.SameMethod1(_argForSameMethod1, 100); return true; }); Работает, но хотелось бы еще попроще. Создать бы единый обработчик для CommunicationException, было бы очень хорошо (вместо try-catch для КАЖДОГО метода сервиса) Добавлено Или вместо Цитата GoldenJoe @ _result = SaveCall(delegate() { _ReturnObject = _testClient.SameMethod1(_argForSameMethod1, 100); return true; }); |
Сообщ.
#27
,
|
|
|
GoldenJoe, в WPF аналог - System.Windows.Application.DispatcherUnhandledException он экземплярный, а не статичный, как в Winforms, так что в Application.Current будет.
|
Сообщ.
#28
,
|
|
|
Spawn.NET, огромное спасибо! Все работает! Лови плюс.
P.S. в C# есть есть некий оператор, позволяющий узнать, например, что некоторый экземпляр класса Exception является CommunicationException. Точно есть, но что-то не гуглится. Добавлено Как все просто оказывается. if (ex is CommunicationException) { //... } Всем спасибо, от try-catch избавился. Вопрос решен. |