Visual studio 2013 如何在visual c++;? 我一直试图从C++中的Windows 10应用程序中读取文件中的数据。然而,在正确构造异步任务方面,我遇到了很多困难,并且不断出现错误,告诉我读取数据的参数类型不正确。我一直在尝试使用GetFileAsync和GetFileFromPathAsync来获取我的StorageFile,但是ReadTextAsync(文件)不会编译

Visual studio 2013 如何在visual c++;? 我一直试图从C++中的Windows 10应用程序中读取文件中的数据。然而,在正确构造异步任务方面,我遇到了很多困难,并且不断出现错误,告诉我读取数据的参数类型不正确。我一直在尝试使用GetFileAsync和GetFileFromPathAsync来获取我的StorageFile,但是ReadTextAsync(文件)不会编译,visual-studio-2013,windows-10,c++-cx,Visual Studio 2013,Windows 10,C++ Cx,以下是我编写的代码的相关部分: auto file = Windows::Storage::StorageFile::GetFileFromPathAsync("C:\\data.txt"); concurrency::create_task(Windows::Storage::FileIO::ReadTextAsync(file)).then([this, file](concurrency::task<Platform::String^> task)

以下是我编写的代码的相关部分:

   auto file = Windows::Storage::StorageFile::GetFileFromPathAsync("C:\\data.txt");
        concurrency::create_task(Windows::Storage::FileIO::ReadTextAsync(file)).then([this, file](concurrency::task<Platform::String^> task)
            {
                try
                {
                    Platform::String^ fileContent = task.get();
                }
            });
auto file=Windows::Storage::StorageFile::GetFileFromPathAsync(“C:\\data.txt”);
并发::创建任务(Windows::Storage::FileIO::ReadTextAsync(文件))。然后([此,文件](并发::任务任务)
{
尝试
{
平台::字符串^fileContent=task.get();
}
});
给出的错误是“file”不是ReadTextAsync的正确类型。它应该接收一个IStorageFile,但是当以我上面尝试的方式构建我的文件时,它接收类型IAsyncOperation


我得到一些建议,认为这不能正常工作的原因是我没有在任务中包含路径集合,但是我在尝试将任务链接在一起以获取数据时遇到了问题。我很确定我遗漏了一些基本的东西,但是任何关于如何正确读入数据的指导都将不胜感激。

这是因为
Windows::Storage::StorageFile::GetFileFromPathAsync
返回您应该首先执行的异步操作,它将返回
IStorageFile^
。这应该如下所示(我没有编译):


嗯,它是异步的——如果您希望它立即运行,那么您需要调用
.get()。小心点,不要在GUI线程上这样做。我在回答中做了一个小的代码更改。非常感谢你的帮助!我终于可以在阅读中看到正确的信息。但是,我正在尝试将此文本本地存储在程序中,以便稍后将其传递到算法中。尝试将此任务之外的变量设置为“text”会产生“封闭函数局部变量不能在lambda正文中引用,除非它在捕获列表中”错误。任务完成后,我有没有办法存储这些值以供使用?@hnobuhisa您应该在捕获列表中捕获局部变量,即[&mylocalvar],但如果异步执行文件读取任务,则不应该捕获局部变量,而是将此变量移到封闭类中。有关捕获列表的更多信息,请阅读此处:。恐怕我以前从未听说过捕获列表,我对该语言非常陌生。将只有一个局部变量供我存储“text”,并且我将只运行此异步任务一次。您建议我如何设置捕获列表来存储变量?很抱歉,在这种情况下,我非常依赖您的帮助。@hnobuhisa,正如我所说的-将此变量移动到您执行文件读取的方法所在的类。如果您将它放在类中,那么只需将捕获列表保留为
[this]
auto getFileAsync = Windows::Storage::StorageFile::GetFileFromPathAsync("C:\\data.txt");
create_task(getFileAsync).then([this](StorageFile^ sf){
   create_task(FileIO::ReadTextAsync(sf)).then([this](Platform::String^ text){
      // here use text
   });
});