考虑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