2012-12-17 112 views
4

我试图在Visual Studio 2012中使用新的异步/等待模式实现异步调用。当我设置我的窗体(使用窗体设计器)然后尝试使用异步方法作为事件处理程序,编译器会抱怨函数不会返回void。在Visual Studio 2012中使用Windows窗体设计器的新Async/Await模式

该方法应该返回一个任务;这就是整个问题。我不知道如何告诉表单设计者,这不是一个常规的事件处理程序。有没有人遇到过这个问题?我是否应该退出使用快速开发的表单设计器?

回答

16

您必须为事件处理程序使用async void方法,而不是async Task。能够将事件处理程序连接到异步方法是允许async void的全部原因。

例如,如果你想用一个按钮单击处理程序,你会写这样的:

private async void button_Click(object sender, EventArgs e) 
{ 
    bool success = await CallSomeMethodAsync(); 
    if (success) 
    { 
      // Do something here, etc... 
    } 
} 
+0

我傻...谢谢! –

+1

您还应该将您的方法封装在try/catch中以处理可能会在事件内部弹出的所有异常。虽然异步任务调用将重新渲染调用者线程的异常,但异步无效调用无法做到这一点。这个异常将停留在子线程上,立即终止你的应用程序而无法恢复,就像你自己创建线程一样。 –

相关问题