Bir zip dosyasından bir görüntüyü açan ve bu görüntüyü bir BitmapImage olarak döndüren bir yönteme sahibim.BitmapImage: BitmapImage'ın görüntüyü döndürmeden önce başlatılması için nasıl bekleyebilirim? (C# .NET)
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 dosyası büyük ve küçük resimlerden oluşan bir karışım içerir. Görüntü büyükse, program, dönüşe ulaşmadan önce başlatmayı tamamlamış olmayabilir. Bu olursa, yöntem boş bir BitmapImage döndürür.
Dönmeden önce uyursam, yöntem çalışır ve yeterli bir gecikmeyle büyük resimler başarıyla başlatılır.
Uyku, ana parçacığı gereksiz yere kilitleyerek programı yavaşladığından ideal değildir. BitmapImage döndürmeden önce başlatma için beklemek için yöntemini nasıl alabilirim?
IsDownloading ve DownloadCompleted olayını denedim. İndirme her zaman 'true' olarak ayarlanır ve DownloadCompleted hiçbir zaman tetiklenmez.
mu [ 'DownloadCompleted'] (https://msdn.microsoft.com/en-us /library/system.windows.media.imaging.bitmapsource.downloadcompleted(v=vs.110).aspx) olay ateşi belki de? – DavidG
Bu garip - sadece bazen. Bu, ancak img'nin halihazırda başlatmayı bitirme zamanı verildiği zaman (örneğin, Uyku kullanarak) ateşlenir. –