繁体   English   中英

等待WinForms异步方法返回后再关闭

[英]Wait for WinForms async method to return before closing

我有一个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因此在等待API调用完成时,GUI保持响应(能够显示数据库中的数据状态)

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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM