私は別のフォームを開く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
@Jon Dispose **はメモリ(必然的に)**または管理オブジェクトに直接影響しません。それは、(慣例により)ネイティブリソースを解放するために使用される方法である。これは、CLRによって割り当てられ管理されるメモリやオブジェクトには影響しません。参照:http:// reedcopsey。com/series/idisposable /与えられた "リソース"はメモリである可能性がありますが、他のものでもよいし、何もできません。 –