没有';在Win 8 Metro中没有缩略图引发COM异常
本文关键字:略图 异常 COM Win Metro 没有 | 更新日期: 2023-09-27 18:26:16
在我的应用程序中,我需要从使用File Picker拾取的文件中获取缩略图。当文件选取器返回一个没有缩略图的文件(如空*.bmp文件)时,以下行引发COM异常。我该如何避免这种情况?
StorageItemThumbnail t = await f.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.DocumentsView);
编辑:其他详细信息,我的意思是.bmp而不是.png对不起。。。
复制:
- 在Metro桌面模式下的任意目录中单击鼠标右键,在上下文菜单中单击"新建"->"位图图像"
- 在测试程序中,启动File Picker,然后对返回的文件调用GetThumbnailAsync;你会得到下面的异常
异常详细信息:
System.Runtime.InteropServices.COMException未由用户代码处理
HResult=-2147467259
消息=错误HRESULT E_FAIL已返回从对COM组件的调用
来源=mscorlib
错误代码=-2147467259堆栈跟踪:在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)位于System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()---提交了一些东西---
InnerException:空
启动文件选取器的代码:
public static async Task<IReadOnlyList<StorageFile>> PickMulipleFilesAsync()
{
FileOpenPicker picker = new FileOpenPicker();
picker.SuggestedStartLocation = PickerLocationId.Desktop;
picker.FileTypeFilter.Add("*");
var files = await picker.PickMultipleFilesAsync();
return files;
}
正如上面的评论和MSDN论坛上的某个人所提到的。一个解决方法就是在try-catch块中调用GetThumbnailAsync,并在没有缩略图时放置占位符图像。
StorageItemThumbnail t=null;
BitmapImage thumbnailImage= new BitmapImage();//image used for display
try{
t = await f.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.DocumentsView);
}
catch(Exception e){
t = null;
}
if (null == t)
thumbnailImage = placeholder;//no thumbnail then use the placeholder image
else
thumbnailImage.SetSource(t);