Ожидание запуска события в модульных тестах Silverlight

Я использую Silverlight Unit Testing Framework для тестирования некоторых классов View Manager. Некоторые тесты требуютPropertyChanged события, которые будут уволены.

В настоящее время я использую комбинациюEnqueueConditional а такжеWaitHandles

Пример 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();
}

Это работает. Но у меня есть вопросы, ноющие на меня:

Мне действительно нужно использовать WaitHandle? Будет ли он работать так же хорошо, если бы я просто использовал bool?

Пример 2

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

Или было бы лучше, если бы я сохранил WaitHandle, но потерял атрибут Timeout и тайм-аут на ожидании?

Пример 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();
}

Итак, я написал три примера, и все они работают. Итак, мой последний вопрос

Что будет иметь лучшую производительность? (Несмотря на то, что разница незначительна, и она чисто академическая Яда Яда Яда. Это интересно само по себе.)У любого из трех примеров есть фундаментальные недостатки?

Ответы на вопрос(1)

Ваш ответ на вопрос