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

来看一个简单的需求:让用户选择一个文件,然后将这个文件转化为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爆炸!

【未解决】FileOpenPicker与FileStream共用的坑_第1张图片

提示使用Task.Run。

好吧那就乖乖改成Task.Run

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

【未解决】FileOpenPicker与FileStream共用的坑_第2张图片

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

而且我在其他地方读取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();
就这样,搞定



你可能感兴趣的:(filestream,FileOpenPicker)