在C ++ / CX中处理IAsyncOperation <storagefile ^> ^对象

时间:2016-09-14 19:05:07

标签: file uwp c++-cx

我想在本地文件夹中创建一个文件,所以我编写了以下代码:

IAsyncOperation<StorageFile^>^ fileTask = Windows::Storage::ApplicationData::Current->LocalFolder->CreateFileAsync("example.dat");

但是我应该如何处理fileTask? 我试图调用GetResults - 方法,但后来我得到以下异常:

Ausnahme ausgelöst bei 0x00007FFD211C7788 (KernelBase.dll) in Test.exe: 0x40080201: WinRT originate error (Parameter: 0x000000008000000E, 0x0000000000000040, 0x000000C00EBFC470).
Ausnahme ausgelöst bei 0x00007FFD211C7788 in Test.exe: Microsoft C++-Ausnahme: Platform::COMException ^ bei Speicherort 0x000000C00EBFC730. HRESULT:0x8000000E Eine Methode wurde zu einem unerwarteten Zeitpunkt aufgerufen.
WinRT-Informationen: Eine Methode wurde zu einem unerwarteten Zeitpunkt aufgerufen.

接下来我尝试使用create_task

create_task(Windows::Storage::ApplicationData::Current->LocalFolder->CreateFileAsync("example.dat")).then([this](StorageFile^ file)
{
    // irrelevant
});

例外:

Ausnahme ausgelöst bei 0x00007FFD211C7788 (KernelBase.dll) in Test.exe: 0x40080201: WinRT originate error (Parameter: 0x00000000800700B7, 0x0000000000000048, 0x000000A936DFB230).
Ausnahme ausgelöst bei 0x00007FFD211C7788 (KernelBase.dll) in Test.exe: 0xE06D7363: Microsoft C++ Exception (Parameter: 0xCCCCCCCC19930520, 0x000000A936DFB830, 0x00007FFD01398AD0, 0x00007FFD012C0000).

对不起语言

我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:1)

  

接下来我尝试使用create_task ...

你的方向正确。建议使用task class进行异步操作。

但是当您拨打example.dat时,文件GetResults可能已存在。因此,您无法再次使用create_task(Windows::Storage::ApplicationData::Current->LocalFolder->CreateFileAsync("example.dat")).then([this](StorageFile^ file)来创建文件。

要解决此问题,只需修改如下代码:

#include <ppltasks.h>
create_task(Windows::Storage::ApplicationData::Current->LocalFolder->CreateFileAsync("example.dat", CreationCollisionOption::ReplaceExisting)).then([this](StorageFile^ file)
{

});

添加了CreationCollisionOption::ReplaceExisting,以便每次新文件都会替换旧文件。并且不要忘记包含ppltask.h