9
votes

Comment utiliser Washandler.Waittall à Mstest sans avertissements de STA?

Y a-t-il un moyen de tester un appareil waithandle.waittall () code> lors de l'utilisation de la solution de test d'unité intégrée de Visual Studio. Lorsque j'essaie d'exécuter un test qui utilise cette fonction dans Visual Studio, le test échoue et lors de l'examen des résultats du test, l'erreur suivante est affichée:

public static void TestInMTAThread(ThreadStart info)
{
    Thread t = new Thread(info);
    t.SetApartmentState(ApartmentState.MTA);
    t.Start();
    t.Join();
}


2 commentaires

Quelle version de Visual Studio?


Visual Studio 2008 avec la possibilité de passer à 2010 si nécessaire


4 Réponses :


7
votes

Vous pouvez avoir deux problèmes. Le premier est celui que vous avez dit: vous ne pouvez pas attendre sur plusieurs poignées d'attente Dans un thread de STA (l'état de l'appartement de fil Mstest). Nous pouvons résoudre ce problème avec un thread MTA créé manuellement.

OnMtaThread(() => handles.WaitAll(Timespan.FromSeconds(10)));


4 commentaires

Dans ce cas, l'action attendrait toutes les poignées. Je vais mettre à jour ma réponse pour montrer un exemple de test d'unité et comment tout cela correspond ensemble.


Cela nécessite donc des changements dans le code productif? Il ne peut être fixé dans le test de l'unité seulement?


Oh, je suis désolé ... Je pense que la prémisse est que vous gênez des poignées d'attente à l'intérieur votre test pour tester des choses comme des rappels ou des trucs filetés.


Oh, je n'ai pas encore eu ce problème ... sonne comme si vous avez besoin d'une sorte de collaborateur qui vérifie l'état du thread actuel et exécute l'action OnmTathread lorsque nécessaire. Mieux encore, postez une question avec votre contexte et vos erreurs!




0
votes

Pour mon studio Visual Studio 2010, seules les tests de configuration suivants fonctionnent. XXX


0 commentaires

0
votes

Pour VS2008, les instructions sont légèrement différentes par rapport à la VS2010. Pour VS2008, modifiez le fichier TestRunConfig et ajoutez les éléments suivants à l'élément TestRunConfiguration:

<ExecutionThread apartmentState="MTA" />


0 commentaires