c# - 等待 this.ShowMessageAsync 在 WPF C# 中不起作用

标签 c# wpf asynchronous

我有一个关于 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/

相关文章:

c# - 使用按钮更改 ViewModel 属性

node.js - nodejs中带有回调的用户定义函数

vb.net - 如何在vb.net中进行一个非常简单的异步方法调用

javascript - 使用 setInterval 更新数据的正确方法

c# - 位图对象可以保存为PNG或JPEG文件格式吗

c# - Visual Studio 附加到进程并在中断时查看代码?

c# - 如何在 C# 中排队要由 MainThread 调用的函数?

wpf - 如何传递IValueConverter参数?

c# - 使用 ItemsSource 将预定义项添加到 ComboBox

c# - iOS 上的 Xamarin Forms,调试元素变为 null