考慮Load事件,這部分的主要形式有:await任務裏面等待的任務 - 其他代碼何時執行?
private async void MainForm_Load(object sender, EventArgs e)
{
var ServerConfigFile = new ClientConfigFile(Environment.CurrentDirectory);
ServerConfigFile.GenerateConfigFile();
var taskCheck = Task.Run(() => CheckUpdate());
await taskCheck;
lblUpdateMessage.Text = "Finished...";
//more code here
}
而且CheckUpdate
函數本身:
private async void CheckUpdate()
{
var connection = new ServerConnection(this);
Helper.CrossThreadInvoke(lblFileDownload,() => lblFileDownload.Text = "Downloading");
Helper.CrossThreadInvoke(lblFileDownload,() => lblFileDownload.Text = "Done");
var taskConfig = Task.Run(() => connection.GetServerConfig());
await taskConfig;
///some unrelated control changes here
}
此代碼是否正確地等待CheckUpdate
運行完畢,所有的代碼(包括評論控制最後的變化)?我的推理是它開始Task
與CheckUpdate
它和awaits
,返回控制MainForm
。 CheckUpdate
運行一個Task
與GetServerConfig
函數在它,awaits
,傳遞控制回到MainForm_Load
,但由於它仍然等待CheckUpdate
完成,它不會繼續到lblUpdateMessage.Text = "Finished...";
行。或者我錯了?
文藝青年最愛的此代碼是否actaully等待所有的CheckUpdate
以顯示Finished
前完成?
是否有一個原因,你不能只是嘗試一下,看看? –
我試圖和它失敗 - 試圖瞭解爲什麼它不工作。您是否有理由在沒有任何實際建議的情況下評論如何處理它或如何改進帖子? – Janushoff
爲什麼在後臺線程中只運行一個方法讓它安排工作在UI線程或其他後臺線程中運行?只需在UI線程上運行它。 – Servy