“Поток прерывался” исключение при отображении диалогового окна

Как насчет использования TimerTask и Timer для планирования повторного выполнения (каждые 5 секунд)? В зависимости от интервала вы выполняете либо задание, выполненное в настоящее время в handler1, либо задание в handler2, либо оба. Возможно, вы можете разбить эти задания на функции, которые вызываются из метода run TimerTask's. Это позволило бы заданию handler1 выполняться до задания handler2 синхронизированным образом в том же потоке.

5
задан Joel Coehoorn 3 November 2008 в 16:09
поделиться

4 ответа

Не используйте Поток. Аварийное прекращение работы. Этот метод резервируется для того, когда время выполнения.NET должно насильственно уничтожить потоки для разгрузки программы.

Можно только "безопасно" использовать это, если Вы собираетесь разгрузить AppDomain и хотеть избавиться от потоков, работающих в нем сначала.

Для избавлений от потока запишите это в совместном режиме. Это означает, что поток должен периодически проверять некоторый флаг, и если флаг установлен, выход обычно из метода потока. Для "уничтожения" потока просто установите флаг и ожидайте потока для выхода.

Можно использовать Объект-событие или простую логическую переменную для этого флага.

Но не используйте Поток. Аварийное прекращение работы.

15
ответ дан 18 December 2019 в 14:53
поделиться

Согласованный с идеей Steven о включении всех исключений при броске. Затем Вы сможете сразу видеть проблему.

Одна вещь, которую это важно для запоминания, у Вас не будет пункта меню отладки, если Ваши настройки Visual Studio будут идти общие, в противоположность установке "Visual C# Developer". Все еще ловит меня, если я нахожусь на новой машине или использовании нового профиля...

0
ответ дан 18 December 2019 в 14:53
поделиться

Можно попытаться звонить

Thread.Sleep(500);

после

backgroundOpertionThread.Start();

Это дало бы фоновому потоку 500 мс, чтобы сделать то, что он должен сделать, прежде чем основной поток получает возможность звонить

backgroundOpertionThread.Abort();

Править: Но я соглашаюсь, что лучшее решение не состояло бы в том, чтобы использовать Поток. Аварийное прекращение работы () вообще

-3
ответ дан 18 December 2019 в 14:53
поделиться

используйте SafeThread и установите ShouldReportThreadAbort на ложь, чтобы заставить проблему уйти...

лучшее решение состояло бы в том, чтобы выполнить это в отладчике с Отладкой>> Исключения>> Брошенный проверенный на все типы исключительной ситуации, и выяснять то, что, оказывается, прерывает Ваш поток

Править: благодарит отправить пример кода, который делает проблему намного легче видеть. НЕ НАЗЫВАЙТЕ THREAD.ABORT

1
ответ дан 18 December 2019 в 14:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: