| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > Многопоточность в WinForms |
| Автор: IBS 5.4.2012, 23:57 | ||||
| Приветствую! Вот что получается: Елементы управления windows forms выполняются в одном потоке. Мне же необходимо создать отдельный поток( в моем случае для рассылки писем по многим адресам). При этом было бы неплохо как-то наблюдать количесво отправленных писем в форме. Но обращаться к элементам формы из нового потока нельзя... Нашел, что для этого вроде используют Dispatcher, пытаюсь делать так:
Внутри метода Sending есть такие строки:
Выходит, что метод запускается в отдельном потоке и даже работает, но при этом блокируется сама форма. Т.е. толку от этого потока ноль. Пытался добавить перед ним Dispatcher.Run(), хотя это уже больше от отчаяния =) Что здесь можно сделать?? |
| Автор: Cheloveck 6.4.2012, 01:13 |
| http://msdn.microsoft.com/en-us/library/ms171728.aspx |
| Автор: IBS 6.4.2012, 09:11 |
| Cheloveck, Большое спасибо за статью! Все получилось! Сам раз десять мимо нее проходил и не разу до конца не дочитывал, а там оказывается все что надо =)) |
| Автор: IBS 6.4.2012, 12:11 |
| Вылезла другая проблема: Внутри нового потока есть блоки try catch. Если операция проходит, то, через метод Invoke, в label формы записываем, что она прошла, если нет то возникает исключение и передается управление блоку Catch в котором происходит запись в label формы который отображает неудачные операции. Проблема в том, что при возникновении исключения в первый раз все происходит как и ожидалось: происходит запись в label(пишу туда число неудачных на данный момент операций), во второй и все последующие этого не происходит. Хотя когда я пытаюсь пройти по F11 все, на первый взгляд, идет: заходим в cath доходим до label.Invoke(...) и переходим на новую итерацию цикла. Может тут какой-то наворот при обработке исключений при использовании Invoke, но я по этой теме ничего не нашел... |
| Автор: Cheloveck 6.4.2012, 19:35 | ||
Нет никаких наворотов. Проверяй свой код. |
| Автор: IBS 8.4.2012, 18:26 |
| Cheloveck, Опять вы были правы!! ) Оказалось, похожие методы копировал и натупил! copyPast - зло (паттерн) |