Страница: 1 |
Страница: 1 |
Вопрос: Диалог убийства или прерывания потока
Добавлено: 09.10.06 17:43
Автор вопроса: Neco | Web-сайт:
Прога с дополнительным потоком. Пока происходит длительная операция юзер не должен иметь возможность тыкнуть ничего лишнего. Включать и выключать каждый раз все ненужные контролы я не хочу потому как это трудоёмкий способ и можно что-нибудь забыть выключить или включить, поэтому решил выводить модальное окно с кнопками "Прервать жёстко" (будет убит поток) и "Прервать мягко" (флаг остановки будет установлен в true и цикл потока наткнувшись на него нормально завершит операцию).
Теперь мучаюсь как отобразить диалог модально.
Если делаю так:
1. создаю окно (New Form).
2. запускаю сторонний поток. (th.start)
3. показываю диалог. (forma.showdialog(me))
то команду скрыть окно должен дать второй поток (потому как первый отображает это окно). Это нормально проходит - он вызвает метод класса формы, в котором делается проверка на InvokeRequred и форма закрывается от своего имени.
Однако если сторонний поток завершится слишком быстро (теоретически), то когда основной поток подойдёт к третьему пункту формы уже не будет существовать и вылетит ошибка. Можно её перехватить, можно ставить задержку в процедуре второго потока, но это кривые способы - хочется нормального грамотного метода, как такое осуществить.
Есть идеи?
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #1
Добавлено: 09.10.06 17:50
вот ещё прикол обнаружил.
Между первым и вторым шагом надо делать
wait_form.Visible = False
иначе если я из второго потока устанваливаю (опять же через Invoke) у статус-лэйблов значения - vb мне поёт о том, что он-де ещё не создавал эти контролы. Непонятно тогда чем он занимался при New...
а это как обойти?
Номер ответа: 2
Автор ответа:
JMP
Вопросов: 6
Ответов: 171
Профиль | | #2
Добавлено: 09.10.06 20:53
ИМХО надо юзать цивильный метод через АПИ
WaitForSingleObject(hThread,Wait_Time)
Номер ответа: 3
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #3
Добавлено: 09.10.06 21:51
При чём тут это?..
Мне форму надо модально показать - главный поток и так некуда не убежит.