BitmapImage:如何在返回图像之前等待BitmapImage被初始化? (C#.NET)

时间:2016-04-13 22:08:07

标签: c# .net wpf bitmapimage

我有一个方法可以在zip文件中打开图像,并将该图像作为BitmapImage返回。

public BitmapImage GetImageFromSource()
{
    using (System.IO.Compression.ZipArchive zi = System.IO.Compression.ZipFile.Open(ZipFileLocation, System.IO.Compression.ZipArchiveMode.Read))
    {
        using (Stream source = zi.GetEntry(InternalLocation).Open())
        {
            BitmapImage img = new BitmapImage();
            img.BeginInit();
            img.CacheOption = BitmapCacheOption.OnLoad;
            img.StreamSource = source;
            img.EndInit();

            //sleeping here allows img to complete initialization
            //not sleeping here means img is still blank upon return
            System.Threading.Thread.Sleep(100);

            return img;
        }
    }
}

zip文件包含大图像和小图像的混合。如果图像很大,img可能在程序到达返回之前没有完成初始化。如果发生这种情况,该方法返回一个空白的BitmapImage。

如果我在返回之前睡眠,则该方法有效,并且在足够延迟的情况下,成功初始化大图像。

睡眠不理想,因为它会通过不必要地锁定主线程来减慢程序的速度。如何在返回BitmapImage之前让方法等待初始化完成?

我尝试过IsDownloading和DownloadCompleted事件。 IsDownloading始终设置为“true”,并且似乎永远不会触发DownloadCompleted。

0 个答案:

没有答案