BackgroundWorker

m4za
Дата: 03.05.2006 10:49:23
Есть следующий код:
//worker - экземпляр класса BackgroundWorker
worker.RunWorkerAsync();
while (worker.IsBusy)
{
   Application.DoEvents();
}
Вопрос: есть ли способы избежать использования while, потому нагрузка на процессор в этом случае достигает 100 процентов. Или что-то вроде WaitHandle для BackgroundWorker?
saint
Дата: 03.05.2006 11:06:58
worker.RunWorkerCompleted+= ...trulala...
m4za
Дата: 03.05.2006 11:24:06
Не совсем то...
Дело в том, что вышенаписанный код выполняется при нажатии на кпонку ОК с установленным DialogResult. И после запуска worker форма закрывается, а она должна дождаться завершения работы worker, и в зависимости от результата его работы решить - закрываться или нет.
Лиман Артём
Дата: 03.05.2006 12:10:08
могу как workaround предложить в цикл добавить Thread.Sleep(...), тогда процессорное время не будет так отжираться...
_______________________________________________________
Never ask users what they want, or they'll tell you.
Картинка с другого сайта.
saint
Дата: 03.05.2006 12:13:03
to m4za:
а какой тогда толк от использования дополнительных потоков, если вы все равно заставляете UI ждать?
m4za
Дата: 03.05.2006 14:45:52
saint
to m4za:
а какой тогда толк от использования дополнительных потоков, если вы все равно заставляете UI ждать?

Но ведь перед нажатием на "ОК" надо как-то проверить результат проверки (worker как раз и выполняет долгую проверку), в то же время имею возможность отмены этой самой проверки и следовательно отмены закрытия диалога. Тогда хочу у вас поитересоваться, как еще это можно сделать. Заранее спасибо
saint
Дата: 03.05.2006 15:45:13
может тогда пусть у вас "OK" просто запускает этот Thread. А по окончании его событие пусть закрывает форму.?
m4za
Дата: 03.05.2006 16:55:27
saint
может тогда пусть у вас "OK" просто запускает этот Thread. А по окончании его событие пусть закрывает форму.?

прикол =))) спасибо
все время думал, что DialogResult должен быть привязан к кнопке, и его нельзяустанавливать в других методах/потоках =)))
Sa
Дата: 03.05.2006 17:15:04

m4za

все время думал, что DialogResult должен быть привязан к кнопке, и его нельзяустанавливать в других методах/потоках =)))

в других потоках нельзя, а по событию RunWorkerCompleted вашего BackgroundWorker'а пожалуйста.

uid = Sa

Posted via ActualForum NNTP Server 1.3

m4za
Дата: 03.05.2006 18:07:50
Sa

m4za

все время думал, что DialogResult должен быть привязан к кнопке, и его нельзяустанавливать в других методах/потоках =)))

в других потоках нельзя, а по событию RunWorkerCompleted вашего BackgroundWorker'а пожалуйста.

uid = Sa
Posted via ActualForum NNTP Server 1.3

И через Invoke тоже нельзя?