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