【问题标题】:Handling an IAsyncOperation<StorageFile^>^ object in C++/CX在 C++/CX 中处理 IAsyncOperation<StorageFile^>^ 对象
【发布时间】:2017-01-22 16:46:00
【问题描述】:

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

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).

对不起

我该如何解决这个问题?

【问题讨论】:

    标签: file uwp c++-cx


    【解决方案1】:

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

    你的方向是正确的。异步操作推荐使用task class

    但是当您调用GetResults 时,文件example.dat 可能已经存在。因此您将无法使用create_task(Windows::Storage::ApplicationData::Current-&gt;LocalFolder-&gt;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

    【讨论】:

      猜你喜欢
      • 2012-11-13
      • 2013-05-06
      • 1970-01-01
      • 2011-09-12
      • 2017-10-29
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多