如何从C ++ winRT的FileOpenPicker窗口中获取所选文件?

时间:2018-07-23 21:23:59

标签: sta c++-winrt

我已经能够提出以下“几乎有效”的C ++ / winRT代码。我用返回IAsyncOperation的方法创建了一个类,以便可以使用co_await关键字。该方法如下所示:

IAsyncOperation<StorageFile> FileDialogs::chooseFileToOpen() const
{
   FileOpenPicker picker{};
   picker.ViewMode(PickerViewMode::Thumbnail);
   picker.SuggestedStartLocation(PickerLocationId::DocumentsLibrary);
   picker.FileTypeFilter().Append(L".jpg");
   picker.FileTypeFilter().Append(L".png");

   StorageFile file = co_await picker.PickSingleFileAsync();


   co_return file;
}

现在,我从按钮的点击处理程序中调用此方法:

void MainPage::btnUpdateSource_Click(IInspectable const & sender, 
  RoutedEventArgs const & args)
{
   FileDialogs fd{};
   auto res = fd.chooseFileToOpen();

   StorageFile file = res.get();
   auto name = file.Name();
   ///.....
}

这可以编译,但是当调用get()方法时,它将触发该断言:

WINRT_ASSERT(!is_sta());

因此,它抱怨该单元是单线程的!而winrt :: init_apartment()却被多线程调用了!

这就是我被困住的地方!

谁能给我一些见识? 我正在使用Visual Studio 2017版本15.7.5。

谢谢, 胡安

0 个答案:

没有答案