为了账号安全,请及时绑定邮箱和手机立即绑定

使用 C# .net framwork 4.7.2 中的 FileOpenPicker

使用 C# .net framwork 4.7.2 中的 FileOpenPicker

C#
呼啦一阵风 2023-07-09 17:54:41
我正在尝试使用 Microsoft.Windows.SDK.Contracts 从 .net 框架 WFP 应用程序访问 Windows10 API。我想使用 FileOpenPicker() 选择图像以供 Windows.Media.Ocr 进行 OCR 处理。但我在使用选择器时遇到了“无效窗口句柄”错误因为 FileOpenPicker 在当前线程上寻找 CoreWindow 作为对话框的所有者。但我们是一个没有 CoreWindow 的 Win32 桌面应用程序。” 我认为根本原因是一样的。但我不知道如何从基于 .net 框架端的代码中修复。public async void Load(){    var picker = new FileOpenPicker()    {        SuggestedStartLocation = PickerLocationId.PicturesLibrary,        FileTypeFilter = { ".jpg", ".jpeg", ".png", ".bmp" },    };    var file = await picker.PickSingleFileAsync();    if (file != null)    {    }    else    {    }}错误消息:System.Exception:“窗口句柄无效。(来自 HRESULT 的异常:0x80070578)”
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

创建一个文件:


using System;

using System.Runtime.InteropServices;


namespace <standardnamespace>

{

    [ComImport]

    [Guid("3E68D4BD-7135-4D10-8018-9FB6D9F33FA1")]

    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]

    public interface IInitializeWithWindow

    {

        void Initialize(IntPtr hwnd);

    }

}

将您的代码更改为:


public async void Load()

{

    var picker = new FileOpenPicker()

    {

        SuggestedStartLocation = PickerLocationId.PicturesLibrary,

        FileTypeFilter = { ".jpg", ".jpeg", ".png", ".bmp" },

    };


    ((IInitializeWithWindow)(object)picker).Initialize(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle);    


    var file = await picker.PickSingleFileAsync();

    if (file != null)

    {


    }

    else

    {


    }

}


查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信