- Pourquoi est-ce que je reçois ce message d'erreur ? "WaitAll pour des handles multiples sur un thread STA n'est pas supporté".
- Dois-je utiliser l'attribut [MTAThreadAttribute] ? Mise à jour : Ne fonctionne pas avec les applications WPF !
Note : L'erreur se situe à la ligne WaitHandle.WaitAll(doneEvents) ; J'utilise un 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'attribut principal de l'application en MTAThreadAttribute. Cela entraînera l'erreur suivante :
Erreur : "WaitAll pour des handles multiples sur un thread STA n'est pas supporté".