![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| sip |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 10.12.2007 Репутация: нет Всего: нет |
Подскажите, пожалуйста: приходящее сообщение с СОМ порта, по событию, вызывает метод. Внутри метода делаю Me.Invoke...(BeginInvoke тоже пробовал), чтобы показать юзеру сообщение с помощью ShowDialog. Хочу чтобы юзер принял решение, перед тем как продолжить. Периодически программа рушится, даже эксепшн словить не могу (не помогает словить даже AppDomain.CurrentDomain.UnhandledException). Подскажите как безопасно показать юзеру модальное окно и получить от него ответ.
|
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
sip, а зачем Me.Invoke???
-------------------- СУВ, Partizan. |
|||
|
||||
| sip |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 10.12.2007 Репутация: нет Всего: нет |
Чтобы показывать диалог в главном потоке. Ведь если не делать Invoke, то диалог будет вызываться в новом потоке, который создало событие. Что я делаю не так? |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
sip, я про многопоточность в первом посте не вижу ни слова
-------------------- СУВ, Partizan. |
|||
|
||||
| sip |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 10.12.2007 Репутация: нет Всего: нет |
да, стоило уточнить, что метод вызываемый событием выполняется в новом потоке. Как правильно нужно сделать в такой ситуации? |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
sip, код покажите...и какую инфу об исключении говорит дебаггер вам
-------------------- СУВ, Partizan. |
|||
|
||||
| sip |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 10.12.2007 Репутация: нет Всего: нет |
Partizan, Дебаггер не ловит исключение, прога просто закрывается и все. Это происходит один раз на примерно 5-7 удачных показов диалога...
|
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
потоков всё также в упор не вижу
-------------------- СУВ, Partizan. |
|||
|
||||
| sip |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 10.12.2007 Репутация: нет Всего: нет |
Когда приходит событие, то OnIncomingEvent() автоматически вызывается в новом потоке. |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
вот эти две строчки как-то подозрительно выглядят
If InvokeRequired Then Me.Invoke(New OnIncomingEventDelegate(AddressOf OnIncomingEvent)) Добавлено @ 22:09 может всё-таки вам стоит вызвать dlgForm.Invoke(делегат(dlgForm.ShowDialog)); ??? Это сообщение отредактировал(а) Partizan - 31.7.2008, 22:09 -------------------- СУВ, Partizan. |
|||
|
||||
| sip |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 10.12.2007 Репутация: нет Всего: нет |
Эта строка и проверяет в каком потоке находимся, и если нужен Invoke, то делаем его. Только что-то не совсем работает.
|
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
sip, Добавлено @ 22:09
может всё-таки вам стоит вызвать dlgForm.Invoke(делегат(dlgForm.ShowDialog)); ??? -------------------- СУВ, Partizan. |
|||
|
||||
| sip |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 10.12.2007 Репутация: нет Всего: нет |
не понимаю почему именно так нужно делать? |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 2 Всего: 93 |
Не, мне кажется это не то. Этот код как я понимаю и так находится внутри формы, так что обращение к Me должно дать правильный результат. У меня есть подозрение что дело даже не в показе диалога, всё-таки не должна бы программа так просто выключаться. Может там чего-то более сложное происходит, связанное с взаимодействием с COM-портом. Например, что происходит если пользователь долго ничего не отвечает на модальный диалог, а в это время с устройства приходит ещё одно событие, но поток-то заблокирован вызовом Invoke? Или ещё что-нибудь в этом духе, по этому куску кода ничего подозрительного не вижу. -------------------- Да. Именно так. |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
ну лично у меня вызвает подозрения этот потенциально вызывающий зацикливание код:
Private Sub OnIncomingEvent() If InvokeRequired Then Me.Invoke(New OnIncomingEventDelegate(AddressOf OnIncomingEvent)) -------------------- СУВ, Partizan. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |