【发布时间】:2012-03-14 00:56:41
【问题描述】:
我有一个打开另一个窗体的 Windows 窗体。在辅助形式中,它异步启动一个任务。如果用户启动任务然后取消它并快速关闭表单,则表单被 Disposed 并设置为 null 但是当任务从被取消中恢复时,我仍然会收到 MessageBox.Show 发生
public class MyMainForm : Form
{
public void OpenChildForm()
{
MyChildForm form = new MyChildForm();
form.ShowDialog();
form.Dispose();
form = null;
}
}
public class MyChildForm : Form
{
private CancellationTokenSource MyTokensource;
private Task task;
public void StartTask()
{
MyTokensource = new CancellationTokenSource();
task = Task.Factory.StartNew(() => MyMethod(MyTokensource.Token), MyTokensource.Token);
}
public void MyMethod(CancellationToken token)
{
var result = StaticClass.DoSomethingLengthy(token); //The cancel make take a couple of seconds to return here
if (result == Cancelled)
{
MessageBox.Show("Cancelled");
UpdateLabel("Cancelled")
}
}
public void ButtonClose_Click()
{
if (task != null && !task.IsCompleted)
{
MyTokensource.Cancel();
}
this.Close();
}
}
【问题讨论】:
标签: c# .net winforms asynchronous task-parallel-library