WaitAll для нескольких дескрипторов в потоке STA не поддерживается

  1. Почему я получаю это сообщение об ошибке? «WaitAll для нескольких дескрипторов в потоке STA не поддерживается.»
  2. Следует ли использовать атрибут [MTAThreadAttribute]? Обновление: Не работает с приложениями WPF!

Примечание: Ошибка находится в строке WaitHandle.WaitAll (doneEvents); Я использую стандартный проект WPF .

private void Search()
{
    const int CPUs = 2;
    var doneEvents = new ManualResetEvent[CPUs];

    // Configure and launch threads using ThreadPool:
    for (int i = 0; i < CPUs; i++)
    {
        doneEvents[i] = new ManualResetEvent(false);
        var f = new Indexer(Paths[i], doneEvents[i]);
        ThreadPool.QueueUserWorkItem(f.WaitCallBack, i);
    }

    // Wait for all threads in pool 
    WaitHandle.WaitAll(doneEvents);
    Debug.WriteLine("Search completed!");
}

Обновление: Следующее решение не работает для приложений WPF! Невозможно изменить основной атрибут приложения на MTAThreadAttribute. Это приведет к следующей ошибке:

Ошибка: «WaitAll для нескольких дескрипторов в потоке STA не поддерживается».

45
задан casperOne 11 July 2012 в 13:46
поделиться