我有一个方法可以在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。