我正在为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的文件存在进行阻止调用。
答案 0 :(得分:1)
如果您的方法在UI线程上运行 - 您无法阻止它,因为它使用异步API并且会阻止异步调用返回结果,从而导致死锁。如果在“基于任务的延续”中运行,则可以使用阻塞get()方法等待并获取任务的结果。
“在Windows应用商店应用中,不要在STA上运行的代码中调用等待。否则,运行时会抛出concurrency :: invalid_operation,因为此方法会阻止当前线程并导致应用但是,您可以调用concurrency :: task :: get方法在基于任务的延续中接收先行任务的结果。“