我想异步运行一个函数来防止UI冻结.这里是按钮单击事件.
private void btnEncrypt_Click(object sender, EventArgs e) { // Create new Vigenere object instant cryptor = new Vigenere(txtPassword.Text, txtBox.Text); // Run encryption async TaskT = new Task (cryptor.Encrypt); T.Start(); }
现在我希望在Task T
完成时调用以下函数,并将其返回值作为参数,如下所示:
private void Callback(string return_value) { txtBox.Text = return_value // Some other stuff here }
怎么做到这一点?
你可以做的是使用该ContinueWith(Action
方法.
所以你会有类似的东西
Taskt = new Task (cryptor.Encrypt); T.Start(); Task continuationTask = t.ContinueWith((encryptTask) => { txtBox.Text = encryptTask.Result; ... })
实际上,这只是表示在当前任务完成后执行操作,完成可能会因取消而成功运行,故障或退出.您可能希望进行一些错误处理,以确保您没有尝试使用已取消或出现故障的任务的结果.