我有一個Windows窗體打開另一個窗體。在輔助形式中,它以異步方式啓動任務。如果用戶啓動的任務,然後取消它,並迅速關閉形式,形式爲設置,並設置當任務被取消,我仍然獲得了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();
}
}
這工作雖然我不明白你爲什麼說它沒有被摧毀的事件,雖然我打電話處置。我猜是因爲GC沒有踢進去! – Jon 2012-03-13 16:22:37
@Jon Dispose **對內存(不一定)**或任何管理對象沒有直接影響。這只不過是一種方法,(按慣例)用於釋放本地資源。它對由CLR分配和管理的內存或對象沒有影響。請參閱:http:// reedcopsey。com/series/idisposable /當然,所討論的「資源」可能是內存,但也可能是其他任何東西,或者甚至沒有任何東西。 – 2012-03-13 16:26:30