| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > Потерялся поток при вызове Invoke |
| Автор: _Jesus 21.1.2008, 10:51 | ||
| Привет всем. Возникла такая проблема: Есть два потока. Первый (основной) работает с формой. Второй (буду называть его "рабочий") совершает некоторую работу, в цикле. Форма со всеми элементами создаётся в основном потоке, поэтому для обновления её из рабочего потока использую анонимный делегат. Рабочий поток проходит четыре круга цикла без проблем. Потом я делаю остновному потоку join рабочего и раняю рабочий поток по исключению. В catch он заходит, но вот после он должен сделать invoke и когда я нажимаю f10 он просто пропадает не известно куда. В общих чертах
Дело в том, что после нажатия f10 рабочий поток не приходит в miGridAddRow. И по исключению не падает. И основной поток, не стартует, а значит рабочий поток не завершился. В чём может быть дело? |
| Автор: mr.DUDA 21.1.2008, 10:52 |
| Может рабочий поток просто висит (цикл выполняет или ещё что-нибудь)... |
| Автор: _Jesus 22.1.2008, 12:19 |
| Есть подозрение, что зависание происходит потому, что рабочий поток пытается вызвать делегат, для обращения к форме, которая была создана в основном потоке. А этот основной поток к тому времени уже сидит в Join. Пока предворительный вывод. Надо ещё проверить... |
| Автор: mr.DUDA 22.1.2008, 17:55 | ||
Для таких случаев можно делать Join с параметром:
|
| Автор: _Jesus 23.1.2008, 10:39 |
| Делегат не вызывался потому, что поток, в котором создавалась форма был в это время остановлен. А имеет ли смысл указывать после Abort Join(0)? Он же ждать ничего не будет. |
| Автор: mr.DUDA 23.1.2008, 12:23 |
| Ну можно не 0 а например 100 поставить Вообще если есть баг, надо фиксить баг а не аборты делать конечно же |