отчего asyncOperation тормозится ManualResetEvent?
От: AlexNek  
Дата: 27.09.12 22:56
Оценка:
Что то старый код перестал правильно работать на "новом месте". Пока не доходит почему.
Есть класс "потока" реализуемый через BackgroundWorker и есть ManualResetEvent

private readonly ManualResetEvent finishWaiter = new ManualResetEvent(false);
private BackgroundWorker worker = new BackgroundWorker();


Инициализуется где то так
worker.DoWork += Worker_DoWork;
worker.RunWorkerCompleted += Worker_RunWorkerCompleted;
worker.RunWorkerAsync(хххх);


И finishWaiter устнавливается так
        private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            finishWaiter.Set();
        }

Весь приведенный код пределено упрощен

Так вот, если вызывать finishWaiter.WaitOne(), после старта, то Worker_RunWorkerCompleted не вызывается никогда и соответственно не вызывается Set и дождаться окончания процесса невозможно.

Если же не использовать finishWaiter.WaitOne() то Worker_RunWorkerCompleted вызывается без проблем.

Глянул, что BackgroundWorker использует следующий код
asyncOperation = AsyncOperationManager.CreateOperation(null);
....
           RunWorkerCompletedEventArgs e = 
                new RunWorkerCompletedEventArgs(workerResult, error, cancelled);
 
            asyncOperation.PostOperationCompleted(operationCompleted, e);


В другой программе подобная конструкция с BackgroundWorker работала без проблем, что сейчас получилось пока не дошло.
Может есть у кого идеи куда рыть?
Cообщение написано в << RSDN@Home 1.2.0 alpha 5-AN-R8 rev. 13227>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.