WaitAll pour plusieurs poignées sur un thread STA n'est pas pris en charge

  1. Pourquoi j'obtiens ce message d'erreur? "WaitAll pour plusieurs poignées sur un thread STA n'est pas pris en charge".
  2. Dois-je utiliser [MTAThreadAttribute] attribut? Mise à jour: Dosn fonctionne pas avec les applications WPF!

Note:
C'erreur est à la ligne WaitHandle.WaitAll(doneEvents);
Je suis en utilisant un standard projet 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!");
}

Mise à jour: La solution suivante ne fonctionne pas pour les applications WPF!
Il n'est pas possible de changer l'application principale de l'attribut MTAThreadAttribute. Il en résultera l'erreur suivante:

Erreur: "WaitAll pour plusieurs poignées sur un thread STA n'est pas pris en charge."

  • Vous vous rendez compte que votre application va geler complètement jusqu'à ce que les Indexeurs sont-ils faits?
  • Oui! Je sais qu'. Mais comme il est il ne fonctionne pas.
  • stackoverflow.com/questions/3784510/...
  • La même erreur, mais la solution n'est pas pour les applications WPF! Vous ne pouvez pas modifier principal attribut de la méthode pour l'application WPF.
InformationsquelleAutor Amir Rezaei | 2010-11-16