“Invalid window handle” error when using FileOpenPicker from C# .net framwork 4.7.2 with Microsoft.Windows.SDK.Contracts without UWP

白昼怎懂夜的黑 提交于 2021-01-27 14:18:06

问题


I am trying to use Microsoft.Windows.SDK.Contracts to access the Windows10 API from .net framework WFP application. I want to use the FileOpenPicker() to select the image for OCR processing by Windows.Media.Ocr. But I met the 'Invalid window handle' error when using the picker

I found a post which met the similar a link issue with C++/WinRT. One of the answer point out " The program will crash because the File­Open­Picker looks for a Core­Window on the current thread to serve as the owner of the dialog. But we are a Win32 desktop app without a Core­Window." I think the root cause is the same. But I don't know how to fix from the my code based on .net framework side.

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
    {

    }
}

Error message: System.Exception: 'Invalid window handle.(Exception from HRESULT:0x80070578)'


回答1:


Create a file with:

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);
    }
}

change your code to:

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
    {

    }
}


来源:https://stackoverflow.com/questions/57161258/invalid-window-handle-error-when-using-fileopenpicker-from-c-sharp-net-framwo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!