簡體   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