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

本文关键字:WinForms async 方法 返回 等待 | 更新日期: 2023-09-27 18:17:25

我有一个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调用完成

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

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

private async Task GetEventData()
{ 
    //...
}
public Main()
{
  InitializeComponent();
  GetEventData()
      .ContinueWith(t => Environment.Exit(-1));
}

可以使用Task.Wait()方法等待其完成。

public Main()
{
  InitializeComponent();
  GetEventData().Wait();
  // Exit the app
  Environment.Exit(-1);
}