Обработчик событий иногда не запускает C # - PullRequest
0 голосов
/ 22 ноября 2010

Я работаю над проектом с некоторым кодом обработки событий. По сути, я создаю таймер, а затем добавляю собственный обработчик событий для события тайм-аута. Я дважды проверил, поставив точку останова, и да, обработчик событий добавляется к этому событию (да, я также запускаю таймер). Однако по какой-то причине иногда срабатывает обработчик событий, а иногда нет. Я использую многопоточность и считаю, что это может быть как-то связано с этим, но я не уверен.

Я знаю, что это неопределенный вопрос, но надеюсь, что кто-то столкнулся с чем-то похожим.

Спасибо

PM

РЕДАКТИРОВАТЬ: Я рассмотрел проблему немного дальше, и я заметил, что это действительно проблема потока. Поток, который отвечает за это событие, является тем, который обрабатывает сетевую часть моей программы, и он сразу же блокируется, потому что он ожидает ввода от другого экземпляра программы в сети. Как бы мне обойти это?

Ответы [ 2 ]

2 голосов
/ 22 ноября 2010

Я немного углубился в проблему и заметил, что это действительно проблема с потоками. Поток, который отвечает за это событие, является тем, который обрабатывает сетевую часть моей программы, и он сразу же блокируется, потому что он ожидает ввода от другого экземпляра программы в сети. Как бы мне обойти это?

Похоже, что у вас (а) есть System.Windows.Timers.Timer с SynchronizingObject , установленным на элемент управления пользовательского интерфейса, или используется (b) система .Windows.Forms.Timer . Затем вы блокируете поток пользовательского интерфейса с помощью сетевого чтения, предотвращая запуск события.

У вас есть 2 варианта: использовать другой поток для чтения по сети или для события таймера. Если вы используете System.windows.Timers.Timer, не передавайте SynchronizingObject , и это вызовет событие в потоке ThreadPool. Или Асинхронизация сети: чтение .

0 голосов
/ 22 ноября 2010

Какой это таймер, и вы сохраняете ссылку на него?Возможно ли, что таймер собирается мусором, прежде чем он из-за пожара?В документах есть предупреждение для System.Windows.Timers.Timer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...