非地铁应用程序中的存储文件异步用法
本文关键字:存储文件 异步 用法 地铁 应用程序 | 更新日期: 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中编译。