![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| V0fka |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Привет!
Есть WPF приложение. Есть класс наследник Window, у которого есть метод
Есть метод Show(string body, double time) в котором включается таймер для закрытия окна
Вот метод, который срабатывает в таймере:
Проблема в том, что из таймера почему-то не срабатывает метод HideAnim(). Если его вызвать не из метода таймера - все нормально. Если его вызвать прямо не через диспетчер из метода таймера - то в самом методе возникает исключение в this.Name (что-то о том, что из другого потока обратиться сюда нельзя). Причем исключение не валит программу, а каким-то образом подавляется. И заметил я это потому, что метод не срабатывал. Я зашел туда отладчиком и случайно увидел, что this.Name выдает исключение. Поэтому я сделал вызов из метода таймера через диспетчер. Но он там не срабатывает. Я подозреваю, что где-то в методе опять таки выдается исключение, которое я не вижу. Но отладчик не заходит в этот метод. Даже если я там точку останова ставлю. Вопрос: как мне попасть туда отладчиком? |
||||||
|
|||||||
| Ilya81 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 18.4.2014 Где: ЛО, Всеволожский р-н Репутация: нет Всего: 4 |
А метод closeTimer_Elapsed завершается? В смысле до выхода из метода выполнение доходит?
Вопрос - почему DispatcherPriority.Background? Это достаточно низкий приоритет, может, просто вызов долго не происходит. |
|||
|
||||
| V0fka |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Оказывается нет.
Я так скопипастил откуда-то. Попробовал вместо Background указать Send, но результат по прежнему не утешительный: выход из метода не происходит. Причем, есть такая особенность. Если я это запускаю в той же сборке, в которой определен этот класс - то отрабатывает. Если же (собственно мне именно так и надо) я использую этот класс в другой сборке, то поведение вот так вот меняется. |
||||
|
|||||
| Ilya81 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 18.4.2014 Где: ЛО, Всеволожский р-н Репутация: нет Всего: 4 |
Рекомендую в конструктор окна перед инициализацией воткнуть такие строчки:
и посмотреть, что он напишет в окно Output. А лучше и FirstChanceException до кучи, где-то что-то выведет наверняка. |
|||
|
||||
| V0fka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Ilya81, "шеф, всё пропало". Появилась проблема, которая эту проблему отодвинула, т.к. сам проект работать перестал
ПС. а все же отладчиком в такие методы зайти никак нельзя? Это сообщение отредактировал(а) V0fka - 22.6.2014, 20:17 |
|||
|
||||
| Ilya81 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 18.4.2014 Где: ЛО, Всеволожский р-н Репутация: нет Всего: 4 |
Мне кажется, что дело не в отладчике, а что метод просто не вызывается ни разу. Если такая особенность, то, скорее всего, где-то какой-то reference потерян. TypeResolve и поможет понять, какой именно. Ну и FirstChanceException выведет в т. ч. обрабатываемые исключения, из-за которых выполнение до HideAnim не доходит. |
|||
|
||||
| V0fka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Понял, спасибо! Понял, спасибо! Если решу проблему, о которой писал выше, обязательно воспользуюсь вашим советом и отпишу по результату! |
|||
|
||||
| V0fka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Ilya81,
Благодаря вашим советам получилось найти и устранить ошибку! Дело в том, что Application.Current.Dispatcher возвращал null, в результате там было NulReferenceExeption, которого я не видел. Что я сделал: из класса, который запускается первым взял Dispatcher.CurrentDispatcher и передал его в класс, в котором происходит вызов closeTimer_Elapsed. Он там осел в переменной disp. А в самом методе переделал вызов на
В результате Ещё раз большое спасибо за советы и подсказки, без вас не разобрался бы! ПС. а почему системой не ловится это NulReferenceExeption, из-за которого все эти проблемы? |
|||
|
||||
| Ilya81 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 18.4.2014 Где: ЛО, Всеволожский р-н Репутация: нет Всего: 4 |
Если версия .Net 4.5, то исключения из других потоков могут приводить не к завершению приложения, а лишь потока (конкретно Timer сам я как-то слишком редко использую, так что его особенности не помню). Включается обработка исключений из всех потоков конфигурацией
|
|||
|
||||
| V0fka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Ilya81, понял, на досуге поэкспериментирую. Спасибо большое за помощь!
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |