Использование ManualResetEvent для ожидания нескольких событий Image.ImageOpened - PullRequest
1 голос
/ 09 апреля 2010
Dictionary<Image, ManualResetEvent> waitHandleMap = new Dictionary<Image, ManualResetEvent>();
List<Image> images = GetImagesWhichAreAlreadyInVisualTree();
foreach (var image in images)
{
    image.Source = new BitmapImage(new Uri("some_valid_image_url"));
    waitHandleMap.Add(image, new ManualResetEvent(false));
    image.ImageOpened += delegate { waitHandleMap[image].Set(); };
    image.ImageFailed += delegate { waitHandleMap[image].Set(); };
}            
WaitHandle.WaitAll(waitHandleMap.Values.ToArray());

WaitHandle.WaitAll блокирует текущий поток пользовательского интерфейса, поэтому события ImageOpened / ImageFailed никогда не будут запущены. Не могли бы вы предложить мне простой способ подождать нескольких событий пользовательского интерфейса?

1 Ответ

1 голос
/ 09 апреля 2010

Почему бы не выполнить WaitAll в другом потоке, а затем использовать Dispatcher для перенаправления вызова обратно в поток пользовательского интерфейса после его завершения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...