如何在WPF c#桌面应用程序

时间:2018-06-05 22:39:00

标签: c# wpf uwp desktop-bridge

我有一个WPF桌面应用程序,我想使用UWP FolderPicker API来选择一个目录。我的应用程序使用UWP打包项目,因此它是作为appx构建和运行的。我添加了Windows和WindowsBase引用,我的项目构建和运行。但是,在尝试使用文件夹选择器时出现运行时错误。我的代码如下:

    private async void OnGetDirectory(object parameter)
    {

        var folderPicker = new Windows.Storage.Pickers.FolderPicker();
        folderPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop;
        folderPicker.FileTypeFilter.Add("*");

        Windows.Storage.StorageFolder folder = await folderPicker.PickSingleFolderAsync();
        if (folder != null)
        {
            // Application now has read/write access to all contents in the picked folder
            // (including other sub-folder contents)
            Windows.Storage.AccessCache.StorageApplicationPermissions.
            FutureAccessList.AddOrReplace("PickedFolderToken", folder);
        }
        else
        {
        }
    }

我得到的错误是System.Exception:await folderPicker.PickSingleFolderAsync();和错误“Invalid window handle. (Exception from HRESULT: 0x80070578)'

我缺少什么,或者甚至可以使用WPF应用程序中的FolderPicker?

2 个答案:

答案 0 :(得分:1)

您可以在FolderPicker命名空间中使用普通的Windows窗体文件夹对话框FolderBrowserDialog,而不是UWP System.Windows.Forms。(例如,请参阅this question)。

如果您想使用StorageFolder,可以拨打StorageFolder.GetFolderFromPathAsync方法,也可以使用System.IO.DirectorySystem.IO.DirectoryInfo等经典文件夹API。

答案 1 :(得分:0)

根据UWP APIs available to a packaged desktop app (Desktop Bridge)文章,某些功能区域尚未经过全面测试或目前正在按预期运行。 "文件和文件夹选择器"您在列表中使用的功能。此功能的详细说明如下:

  

打包的应用程序具有完整的文件系统访问权限,不需要UWP选择器。

因此,您的UWP打包项目可能无法完成FolderPicker。请尝试使用WPF本身支持的文件相关API。

更多详情请参阅this document