Xby*_*nce 2 c# multithreading asynchronous callback asynccallback
我想异步运行一个函数来防止UI冻结.这里是按钮单击事件.
private void btnEncrypt_Click(object sender, EventArgs e)
{
// Create new Vigenere object instant
cryptor = new Vigenere(txtPassword.Text, txtBox.Text);
// Run encryption async
Task<string> T = new Task<string>(cryptor.Encrypt);
T.Start();
}
Run Code Online (Sandbox Code Playgroud)
现在我希望在Task T完成时调用以下函数,并将其返回值作为参数,如下所示:
private void Callback(string return_value)
{
txtBox.Text = return_value
// Some other stuff here
}
Run Code Online (Sandbox Code Playgroud)
怎么做到这一点?
你可以做的是使用该ContinueWith(Action<Task>)方法.
所以你会有类似的东西
Task<string> t = new Task<string>(cryptor.Encrypt);
T.Start();
Task continuationTask = t.ContinueWith((encryptTask) => {
txtBox.Text = encryptTask.Result;
...
})
Run Code Online (Sandbox Code Playgroud)
实际上,这只是表示在当前任务完成后执行操作,完成可能会因取消而成功运行,故障或退出.您可能希望进行一些错误处理,以确保您没有尝试使用已取消或出现故障的任务的结果.
您想使用Task.Run并等待它。这将使该方法在线程池线程上执行,并在完成后将返回的字符串分配给 TextBox:
private async void btnEncrypt_Click(object sender, EventArgs e)
{
cryptor = new Vigenere(txtPassword.Text, txtBox.Text);
textBox.Text = await Task.Run(() => cryptor.Encrypt());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7191 次 |
| 最近记录: |