UWP中FolderPicker.PickSingleFolderAsync抛出COMException(E_FAIL)求助
解决UWP文件选择器抛出E_FAIL(0x80004005)异常的常见方案
嘿,这个System.Runtime.InteropServices.COMException(HRESULT 0x80004005)我在UWP开发里碰到过好几次,结合你说的「其他位置用文件选择器没问题、Win10桌面从VS2015启动」的场景,大概率是以下几个原因,给你一一拆解:
1. 调用线程不对——必须在UI线程执行文件选择器
UWP的文件选择器是带UI交互的控件,必须在UI线程(Dispatcher线程)调用,如果你的代码是在后台线程、或者async方法里不小心跑到非UI线程了,就会直接抛出E_FAIL。
举个例子,正确的调用方式应该用Dispatcher切换回UI线程:
using Windows.UI.Core; // ... await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => { var picker = new FileOpenPicker(); picker.ViewMode = PickerViewMode.Thumbnail; picker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary; picker.FileTypeFilter.Add(".txt"); // 必须添加至少一个文件类型 var selectedFile = await picker.PickSingleFileAsync(); if (selectedFile != null) { // 处理选中的文件 } });
2. 文件选择器的初始化参数不合法
最常见的坑是没设置有效的文件类型过滤规则,或者设置的规则有问题:
- 如果你没调用
FileTypeFilter.Add()添加任何文件类型,picker会直接报错 - 有些场景下通配符
*可能不被支持(比如某些系统版本),建议明确指定具体的扩展名(比如.txt、.docx) - 注意别写错属性名:Win10 UWP里是
FileTypeFilter,不是旧版本的FileTypes
3. 调试环境的临时问题(VS2015专属小坑)
VS2015和Win10部分版本的兼容性偶尔会出点小问题,试试这些快速排查步骤:
- 清理解决方案(菜单栏→项目→清理),然后重新生成部署
- 卸载当前调试的应用(开始菜单里找到应用右键卸载),再重新从VS启动
- 重启VS和电脑,有时候就是这么玄学
4. 特殊位置的权限问题(可能性较低)
虽然你说其他地方用没问题,但如果这次是访问特殊位置(比如Documents库、图片库),可以检查下Package.appxmanifest里有没有声明对应的权限:
- 打开清单文件,切换到「功能」标签
- 确保勾选了「文档库访问」「图片库访问」等需要的权限(如果你的picker指向这些位置)
如果能提供具体的代码片段,能更精准定位问题,但以上这几个方案应该能解决大部分E_FAIL的情况。
内容的提问来源于stack exchange,提问作者Stuart Whitehouse
相关产品推荐
相关产品推荐

