【发布时间】:2023-03-24 02:30:01
【问题描述】:
我有无法更改的签名方法。应该是
protected override void OnInitialize()
使用 Windows 8 Metro API,我需要在这个 NoSignatureChange 方法中检查文件是否存在并读取它。 使用 PlainOldCSharp,我会写类似
protected override void OnInitialize()
{
...
try
{
var file = folder.OpenFile(fileName);
fileExists=true;
}
catch(FileNotFoundException)
{
fileExists=false
}
}
记住,在Windows 8 API only way to check if file exists is handling FileNotFoundException 此外,在 Windows 8 API 中,所有 FileIO API 都是异步的,所以我只有 file.OpenFileAsync 方法。
所以,问题是:我应该如何在 Windows 8 API 中使用 folder.OpenFileAsync 方法编写此代码而不更改包含方法的签名
【问题讨论】:
-
哦,AsTask().Wait() 本身可以抛出 3 个不同的异常
-
为什么不能更改方法的签名?
-
@svick 我已经更新了问题。
-
更改签名要好得多。如果您要将某种类库移植到 Metro,那么您猜怎么着?它应该是
async(在这种情况下,async Task,而不是async void)。这是最干净的方法。强制 Metro 阻止是可能,但您将在整个过程中与平台和 API 作斗争,而且您肯定会危及您的应用程序被商店批准的机会。 -
我无法更改第 3 方 SDK。
标签: c# xaml asynchronous windows-8 async-await