Esperando el disparo de eventos en las pruebas unitarias de Silverlight

Estoy utilizando el Marco de prueba de unidad de Silverlight para probar algunas clases de View Manager. Algunas pruebas requieren laPropertyChanged Eventos a ser despedidos.

Actualmente estoy usando una combinación deEnqueueCondicional yWaitHandles

Ejemplo 1

[TestMethod]
[Asynchronous]
[Timeout(1000)]
public void TestNotificationExample()
{
    var manager = new UserManager();

    var waitHandle = new ManualResetEvent(false);
    manager.PropertyChanged += (sender, propChangArgs) =>
                                {
                                    waitHandler.Set();
                                };
    manager.DoTheThingThatTriggersNotification();
    // The notification event fires aynshronously to this
    EnqueueConditional (() => waitHandler.WaitOne(0));
    // Enqueue other tests here....
    EnqueueTestComplete();
}

Esto funciona. Pero tengo preguntas que me molestan:

¿Realmente necesito usar WaitHandle? ¿Funcionaría igual de bien si solo usara un bool?

Ejemplo 2

bool fHasFiredEvent = false;
manager.PropertyChanged += (sender, propChangeArgs) =>
                           { 
                               fHasFiredEvent = true;
                           }
manager.DoTheThingThatTriggersNotification();    
EnqueueConditional (() => fHasFiredEvent);
EnqueueTestComplete();

¿O sería mejor si mantuviera el WaitHandle, pero perdiera el TimeoutAttribute y terminara el tiempo de espera en la espera?

Ejemplo 3

[TestMethod]
[Asynchronous]
public void TestNotificationExample()
{
    var manager = new UserManager();

    var waitHandle = new ManualResetEvent(false);
    manager.PropertyChanged += (sender, propChangArgs) =>
                                {
                                    waitHandler.Set();
                                };
    manager.DoTheThingThatTriggersNotification();
    EnqueueCallback (() => Assert.IsTrue(waitHandler.WaitOne(1000));
    EnqueueTestComplete();
}

Así que ahora he escrito tres ejemplos, y todos funcionan. Así que mi pregunta final es

¿Cuál tendría el mejor rendimiento? (Aunque la diferencia es insignificante y es puramente académica yada yada yada. Es interesante por su propio bien).¿Alguno de los tres ejemplos tiene defectos fundamentales?

Respuestas a la pregunta(1)

Su respuesta a la pregunta