我有一个关于 await this.ShowMessageAsync() 方法的小问题。我在谷歌上搜索了很多我的问题,但还没有成功。
我收到以下代码的错误“;预期”
private void removeGameButton_Click(object sender, RoutedEventArgs e)
{
Task<MessageDialogResult> result = await this.ShowMessageAsync("Hi", "Message", MessageDialogStyle.AffirmativeAndNegative);
if(result.Result == MessageDialogResult.Negative)
{
Console.WriteLine("No");
}
else
{
Console.WriteLine("yes");
}
}
我在使用“this”时遇到错误。如果我不使用 await 那么它工作正常,但是我不知道从消息对话中获得结果。
我也从 https://www.nuget.org/packages/Microsoft.Bcl.Async 安装了 2 3 次 Microsoft.Bcl.Async
我真的被这个困住了。所以请帮我找到解决方案。提前致谢
最佳答案
您需要声明为异步。由于它看起来像一个事件处理程序,您应该创建一个新方法来保存逻辑。
private async void removeGameButton_Click(object sender, RoutedEventArgs e)
{
await DoWork();
}
private async Task DoWork()
{
Task<MessageDialogResult> result = await this.ShowMessageAsync("Hi", "Message", MessageDialogStyle.AffirmativeAndNegative);
if(result.Result == MessageDialogResult.Negative)
{
Console.WriteLine("No");
}
else
{
Console.WriteLine("yes");
}
}
其中一个原因是异常:如果您的异步方法生成异常,则在其签名中使用 Task
声明该方法可以使异常包含在 Task 对象中。例如:
Task myWork = null;
try
{
myWork = DoWork();
await myWork; //await the Task then an exception occurs
}
catch(SomeException e)
{
//now you can get at the exception in myWork.Exception
}
如果您这样做,则异常包含在 myWork
Task
对象中,例如通过 myWork.Exception,它包含聚合异常(异常列表可能是由于嵌套等待表达式)。如果您将方法声明为纯粹的 async void
那么如果发生错误,您将以 unobserved exception 结束。 .您可以使用将它们设置为已观察的事件处理程序在应用程序级别处理它们。您还可以使用配置来控制是否看到这些未观察到的异常。
<configuration>
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
</configuration>
默认情况下启用设置为 false。
关于c# - 等待 this.ShowMessageAsync 在 WPF C# 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23428167/