
08.02.2009, 09:50
|
|
Reservists Of Antichat - Level 6
Регистрация: 22.01.2007
Сообщений: 616
Провел на форуме: 7452489
Репутация:
1359
|
|
Сообщение от [x26]VOLAND
Такой вопрос (C#).
Есть основной поток программы. Из него запускаю другой (рабочий) поток методом thread.Start().
Но как известно, код после thread.Start() выполняется сразу, не дожидаясь завершения рабочего потока.
Как мне дождаться завершения рабочего потока и только затем продолжить выполнение кода сновного потока, при этом чтобы во время ожидания GUI программы не зависал?
Пробовал AutoResetEvent :
Код:
thread.Start(); //Запускаем рабочий поток
autoEvent.WaitOne(); // лочится основной поток
< some_code >; // код, который нам надо выполнить по завершению рабочего потока
В конце рабочего потока прописан сигнальный вызов autoEvent.Set().
Но данный метод естественно не прокатил, ибо ожидающий (он же основной) поток начисто блокируется (то есть gui виснет)
Какие есть пути решения?
в .NET framework начиная с 2.0 есть такая штука как BackgroundWorker - чтото вроде упрощенной для пользования реализации потоков. у него есть асинхронные вызовы. используй его. я думаю это решит твою проблему.
|
|
|