通用Windows应用程序中的FileExists。

时间:2015-09-09 04:49:06

标签: win-universal-app c++-cx windows-10-mobile

我正在为Windows设备开发通用Windows应用程序。 我正在用C ++ / CX开发应用程序。

在应用程序中我想检查文件是否退出设备,并且呼叫应该是阻止呼叫。 所以我写了一个函数,如下所示。

FileExist(String^ myFolder, String ^myFile)
{
    // Get the folder object that corresponds to myFolder
    // this absolute path in the file system.
    try{
    create_task(StorageFolder::GetFolderFromPathAsync(myFolder)).then([=]                      (StorageFolder^ folder){

           create_task(folder->GetFileAsync(name)).then([=](StorageFile^ myfile){
           return true;
            });
           return false;
    });
    }
    catch (Exception^ e)
    {
            return false;
    }
}

但GetFolderFromPathAsync和GetFileAsync调用是异步调用,我的函数应该阻塞,所以我等待每个lambda。但我得到了以下错误。

“将无效参数传递给认为无效参数致命的函数。”

所以有人请告诉我如何对Universal Windows App的文件存在进行阻止调用。

1 个答案:

答案 0 :(得分:1)

如果您的方法在UI线程上运行 - 您无法阻止它,因为它使用异步API并且会阻止异步调用返回结果,从而导致死锁。如果在“基于任务的延续”中运行,则可以使用阻塞get()方法等待并获取任务的结果。

“在Windows应用商店应用中,不要在STA上运行的代码中调用等待。否则,运行时会抛出concurrency :: invalid_operation,因为此方法会阻止当前线程并导致应用但是,您可以调用concurrency :: task :: get方法在基于任务的延续中接收先行任务的结果。“

https://msdn.microsoft.com/en-us/library/hh749955.aspx