等待WinForms异步方法在关闭之前返回

时间:2014-08-11 16:25:00

标签: c# winforms asynchronous

我有一个WinForms应用程序,它从表中查找一些数据,并通过HTTP将所述数据发送到外部API。在应用程序中,我显示一个数据网格,列出包含通过API发送的数据的行。

我希望应用程序在完成通过HTTP API发送数据后退出。在程序自行关闭之前,我如何等待异步方法GetEventData完成执行?

public Main()
{
  InitializeComponent();

  GetEventData();

  // Exit the app
  Environment.Exit(-1);
}

调用API的方法如下(整个方法仅显示await部分)

private async void GetEventData()
{ 
  \\ Get data from database code before here

  ClientDataObject client = new ClientDataObject();
  apiResult = await client.SendDataVia API(); 

  // Update the grid with list of rows that were sent to API
  UpdateGridView();
}

目前,应用程序启动然后立即存在。我相信这是因为GetEventData方法没有阻止其余的代码。我正在使用asyncawait,因此GUI在等待API调用完成时保持响应(能够显示数据库中的数据状态)

2 个答案:

答案 0 :(得分:1)

async方法不应该是void。当方法是事件的处理程序时,您应该只有async void方法。它应该返回Task。然后,您可以退出应用程序以响应该任务的完成:

private async Task GetEventData()
{ 
    //...
}

public Main()
{
  InitializeComponent();

  GetEventData()
      .ContinueWith(t => Environment.Exit(-1));
}

答案 1 :(得分:0)

您可以使用.Wait()的{​​{1}}方法等待它完成。

Task