非地铁应用程序中的存储文件异步用法

本文关键字:存储文件 异步 用法 地铁 应用程序 | 更新日期: 2023-09-27 18:32:56

我正在尝试在我的类库中创建存储文件的实例...

var localFolder = ApplicationData.Current.LocalFolder;
StorageFile destinationFile = await localFolder.CreateFileAsync(destination, CreationCollisionOption.GenerateUniqueName);

VS11没有构建说:"await"要求类型"Windows.Foundation.IAsyncOperation"具有合适的GetAwaiter方法。您是否缺少"系统"的使用指令?

显然我正在使用 .net 4.5 作为目标,并且我引用了 Windows 程序集......不知道为什么这段代码在 MetroStyle 中工作,但不在类库中构建......如何在类库中创建存储文件的实例???在此阶段,是否以异步方式创建文件并不重要...

请让我知道你的想法...斯泰利奥

非地铁应用程序中的存储文件异步用法

对我有用的是"手动"添加目标平台版本

<PropertyGroup>
  <TargetPlatformVersion>8.0</TargetPlatformVersion>
</PropertyGroup>

并在物料组中添加以下内容

<ItemGroup>
  <Reference Include="System.Runtime.WindowsRuntime" />
  <Reference Include="System.Runtime" />
  <Reference Include="Windows" />
</ItemGroup>

然后项目应该正常编译。

我遇到了同样的问题。问题是命名空间标头中缺少系统命名空间。我只是在命名空间中包含系统并且它起作用了。希望对您有所帮助。

看起来您正在尝试使用 WinRT 库中的类型,因为StorageFile类文档指出它仅适用于 Metro,并且可以在 Windows.Storage 中找到它。

这篇博文介绍了如何构建它,但它似乎是一个手动过程。它还详细说明了错误的原因:

使用 await 关键字会导致编译器查找 GetAwaiter 此接口上的方法。由于 IAsync操作不 定义一个 GetAwaiter 方法,编译器想要查找一个 扩展方法。

基本上,看起来您需要添加对以下内容的引用: System.Runtime.WindowsRuntime.dll


请花点时间阅读他的博客文章,但为了清楚起见,我将把重要的部分放在这里。


下面的博客内容毫不客气抄袭

首先,在记事本中,我在 EnumDevices.cs 中创建了以下 C# 源代码:

using System;
using System.Threading.Tasks;
using Windows.Devices.Enumeration;
using Windows.Foundation;
class App {
    static void Main() {
        EnumDevices().Wait();
    }
    private static async Task EnumDevices() {
        // To call DeviceInformation.FindAllAsync:
        // Reference Windows.Devices.Enumeration.winmd when building
        // Add the "using Windows.Devices.Enumeration;" directive (as shown above)
        foreach (DeviceInformation di in await DeviceInformation.FindAllAsync()) {
            Console.WriteLine(di.Name);
        }
    }
}

其次,我创建了一个 Build.bat 文件,我从开发人员命令提示符运行该文件来构建此代码(这应该是 1 行,但我将其包装在这里以提高阅读能力(:

csc EnumDevices.cs  
/r:c:'Windows'System32'WinMetadata'Windows.Devices.Enumeration.winmd  
/r:c:'Windows'System32'WinMetadata'Windows.Foundation.winmd 
/r:System.Runtime.WindowsRuntime.dll  
/r:System.Threading.Tasks.dll

然后,在命令提示符下,我只需运行 EnumDevices.exe 即可查看输出。

自从我发帖以来一定有很长时间了添加引用后:
System.Runtime.WindowsRuntime.dll
System.Threading.Tasks.dll

并在项目文件中面向 Windows 8:

  <PropertyGroup>
    <TargetPlatformVersion>8.0</TargetPlatformVersion>
  </PropertyGroup>

上面提到的示例可以在VS中编译。