您的位置:首页 > 运维架构

【未解决】FileOpenPicker与FileStream共用的坑

2016-01-14 21:01 381 查看
来看一个简单的需求:让用户选择一个文件,然后将这个文件转化为Stream,供后续使用

初始是这样写的:

private async void Button_Click(object sender, RoutedEventArgs e)
{
var picker = new FileOpenPicker();
picker.ViewMode = PickerViewMode.Thumbnail;
picker.FileTypeFilter.Add(".txt");

var file = await picker.PickSingleFileAsync();
if (file != null)
{
FileStream fs;
fs = new FileStream(file.Path, FileMode.Open);
}
}

运行程序,然后boom爆炸!



提示使用Task.Run。

好吧那就乖乖改成Task.Run

继续F5运行程序,还是boom爆炸!



我好无助啊,纠结了好久还是没能解决问题。

而且我在其他地方读取LocalFolder中的文件都不存在这个问题,下面的代码是没有爆炸的!

var files = await ApplicationData.Current.LocalFolder.GetFilesAsync();
foreach (var file in files)
{
using (var fs = new FileStream(file.Path, FileMode.Open))
{
//
}
}

虽然不知道为什么上面两段代码为什么会爆炸,但是后来还是找到了个解决方案
Stream stream = await file.OpenStreamForReadAsync();就这样,搞定
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息