Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Диалог убийства или прерывания потока Добавлено: 09.10.06 17:43  

Автор вопроса:  Neco | Web-сайт: neco.pisem.net | ICQ: 247906854 
Прога с дополнительным потоком. Пока происходит длительная операция юзер не должен иметь возможность тыкнуть ничего лишнего. Включать и выключать каждый раз все ненужные контролы я не хочу потому как это трудоёмкий способ и можно что-нибудь забыть выключить или включить, поэтому решил выводить модальное окно с кнопками "Прервать жёстко" (будет убит поток) и "Прервать мягко" (флаг остановки будет установлен в true и цикл потока наткнувшись на него нормально завершит операцию).
Теперь мучаюсь как отобразить диалог модально.
Если делаю так:
1. создаю окно (New Form).
2. запускаю сторонний поток. (th.start)
3. показываю диалог. (forma.showdialog(me))
то команду скрыть окно должен дать второй поток (потому как первый отображает это окно). Это нормально проходит - он вызвает метод класса формы, в котором делается проверка на InvokeRequred и форма закрывается от своего имени.
Однако если сторонний поток завершится слишком быстро (теоретически), то когда основной поток подойдёт к третьему пункту формы уже не будет существовать и вылетит ошибка. Можно её перехватить, можно ставить задержку в процедуре второго потока, но это кривые способы - хочется нормального грамотного метода, как такое осуществить.
Есть идеи?

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #1
Добавлено: 09.10.06 17:50
вот ещё прикол обнаружил.
Между первым и вторым шагом надо делать
        wait_form.Visible = True
        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-сайт: neco.pisem.net
 Профиль | | #3
Добавлено: 09.10.06 21:51
При чём тут это?..
Мне форму надо модально показать - главный поток и так некуда не убежит.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам