【问题标题】:UWP FileOpenPicker locks\freezes app in debugUWP FileOpenPicker 在调试中锁定\冻结应用程序
【发布时间】:2018-05-23 14:32:39
【问题描述】:

如果附加了调试器,调用此函数会导致应用挂起。如果我在没有调试器的情况下运行,则不会挂起,并且文件选择器可以正常工作。

    private async void OnClick(object sender, RoutedEventArgs e)
    {
        FileOpenPicker openPicker = new FileOpenPicker();
    }

我确定这是非常简单的事情,但我就是不知道。

编辑:

这是我的使用方法。请记住,更简单的函数会在没有我所有额外代码的情况下产生挂起问题。我已经塞满了图像保存,但这是我在解决这篇文章的内容时想要调试的一个单独问题。

.

   public async Task ImportHeader()
        {
             FileOpenPicker openPicker = new FileOpenPicker();
            openPicker.ViewMode = PickerViewMode.Thumbnail;
            openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
            openPicker.FileTypeFilter.Add(".jpg");
            openPicker.FileTypeFilter.Add(".png");

            // For multiple image selection
            var files = await openPicker.PickMultipleFilesAsync();
            foreach (StorageFile singleImage in files)
            {
                IRandomAccessStream stream = await singleImage.OpenAsync(Windows.Storage.FileAccessMode.Read);

                var image = new BitmapImage();
                image.SetSource(stream);
                HeaderImage.Source = image;

                //We also save this to disk for later
                Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
                Windows.Storage.StorageFile file = await storageFolder.CreateFileAsync("header.jpg", Windows.Storage.CreationCollisionOption.ReplaceExisting);

                stream.Seek(0);

                using (StreamWriter bw = new StreamWriter(file.OpenStreamForWriteAsync().Result))
                {
                    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream);

                    var renderTargetBitmap = new RenderTargetBitmap();
                    await renderTargetBitmap.RenderAsync(HeaderImage, (int)HeaderImage.Width, (int)HeaderImage.Height);
                    var pixels = await renderTargetBitmap.GetPixelsAsync();
                    byte[] bytes = pixels.ToArray();

                    bw.Write(stream);
                }
            }
        }

【问题讨论】:

  • 您的代码示例似乎缺少某些内容。您究竟是如何显示文件选择器对话框的?
  • 我已经添加了我正在使用的实际代码的上下文。然而,更简单的第一行在没有所有其他内容的情况下重新创建了挂起。
  • 你的两个代码示例在我的机器上都可以正常工作,不管有没有调试器。
  • 只是为了测试,能不能做一个空白的UWP项目,在里面某处执行FileOpenPicker openPicker = new FileOpenPicker();这行代码?
  • 您是否有机会使用 Insider 版本?我们最近遇到了一个错误,该错误会溜到内幕,导致在某些情况下(包括文件选择器)在调试下挂起。请运行“winver”并分享输出。

标签: windows uwp windows-10-universal


【解决方案1】:

这在我最近的一些 Windows 10 Insider Preview 版本中也发生过,而该过程在 Windows 10 的稳定版本中完美运行。我认为您可以假设原因是存在的,而不是您的代码。

【讨论】:

  • Windows Insider PC 1709 (17025.1000) 选择器挂起 部署到非内部程序计算机后,选择器按预期工作。
  • 是的,这是一个已知的错误,它溜进了 17025 内部版本。它在 17027 及更高版本中得到修复。
猜你喜欢
  • 2018-08-02
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 2022-07-26
  • 2011-08-18
  • 1970-01-01
  • 2021-10-18
相关资源
最近更新 更多