У меня есть 8 приложение для Windows, который я пытаюсь загрузить изображение, используя следующий код:асинхронной LoadImage рутина висит
private async Task<BitmapImage> LoadImage(IStorageFile storageFile)
{
System.Diagnostics.Debug.WriteLine("LoadImage started");
try
{
// Set the image source to the selected bitmap
BitmapImage bitmapImage = null;
// Ensure a file was selected
if (storageFile != null)
{
System.Diagnostics.Debug.WriteLine("LoadImage::OpenAsync");
// Ensure the stream is disposed once the image is loaded
using (IRandomAccessStream fileStream = await storageFile.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
System.Diagnostics.Debug.WriteLine("New Bitmap");
// Set the image source to the selected bitmap
bitmapImage = new BitmapImage();
System.Diagnostics.Debug.WriteLine("Set Source");
bitmapImage.SetSource(fileStream);
}
}
return bitmapImage;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.ToString());
} // End of catch
finally
{
System.Diagnostics.Debug.WriteLine("Load image finished");
}
return null;
}
Когда я запускаю код иногда работает. Но иногда он просто зависает и я получаю следующий результат:
LoadImage started LoadImage::OpenAsync
я использую storageFile.OpenAsAsync
неправильно? Мой файл хранение является результатом вызова:
FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.List;
openPicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
openPicker.FileTypeFilter.Add(".jpg");
openPicker.FileTypeFilter.Add(".png");
openPicker.FileTypeFilter.Add(".bmp");
StorageFile file = await openPicker.PickSingleFileAsync();
if (file != null)
{
var loadImageTask = LoadImage(currentStorageFile);
loadImageTask.Wait();
DisplayImage.Source = loadImageTask.Result;
}
Так что это не должно быть проблемой песочницы (а не исключение).
Может ли кто-нибудь указать мне правильный путь?
Есть ли у вас вызов 'Task.Wait' или' Task.Result' где-то дальше в вашем стеке вызовов? –
Да, у меня есть: var loadImageTask = LoadImage (currentStorageFile); loadImageTask.Wait(); DisplayImage.Source = loadImageTask.Result; – Kyle