使用 C# .net Framework 4.7.2 中的 FileOpenPicker 时出现“无效 window 句柄”错误 Microsoft.Windows.SDK.Contracts,没有 UWP
“Invalid window handle” error when using FileOpenPicker from C# .net framwork 4.7.2 with Microsoft.Windows.SDK.Contracts without UWP
我正在尝试使用 Microsoft.Windows.SDK.Contracts 从 .net 框架 WFP 应用程序访问 Windows10 API。
我想使用 FileOpenPicker() 来 select 由 Windows.Media.Ocr 进行 OCR 处理的图像。但是我在使用选择器
时遇到了'Invalid window handle'错误
我发现了一个 post,它遇到了与 C++/WinRT 类似的 a link 问题。其中一个答案指出“该程序将崩溃,因为 FileOpenPicker 在当前线程上寻找一个 CoreWindow 作为对话框的所有者。但我们是一个没有 Core[=29= 的 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:'Invalid window handle.(Exception from HRESULT:0x80070578)'
创建一个文件:
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
{
}
}
我正在尝试使用 Microsoft.Windows.SDK.Contracts 从 .net 框架 WFP 应用程序访问 Windows10 API。 我想使用 FileOpenPicker() 来 select 由 Windows.Media.Ocr 进行 OCR 处理的图像。但是我在使用选择器
时遇到了'Invalid window handle'错误我发现了一个 post,它遇到了与 C++/WinRT 类似的 a link 问题。其中一个答案指出“该程序将崩溃,因为 FileOpenPicker 在当前线程上寻找一个 CoreWindow 作为对话框的所有者。但我们是一个没有 Core[=29= 的 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:'Invalid window handle.(Exception from HRESULT:0x80070578)'
创建一个文件:
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
{
}
}