使用ManualResetEvent等待多个Image.ImageOpened事件

时间:2010-04-09 05:07:51

标签: c# silverlight concurrency event-handling

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会阻止当前的UI线程,因此永远不会触发ImageOpened / ImageFailed事件。你能建议我一个简单的解决方法来等待多个ui事件吗?

1 个答案:

答案 0 :(得分:1)

为什么不在另一个线程上执行WaitAll,然后使用Dispatcher在完成后将一个回调编组回UI线程?