Давайте предположим, что внутри формы Windows я запускаю долгосрочную задачу, подобную этой:
ThreadPool.QueueUserWorkItem(new WaitCallback(UpdateDailyTasksChart));
Затем эта функция выполняется некоторое время, но я закрываю окно до его завершения.
private void UpdateDailyTasksChart (object param)
{
//Call Data Access Layer, go get MySQL Data. But I close the Form.
UICallback(chartData); //The Form is closed when this is executed.
}
А теперь вот что делает UICallback:
private delegate void UICallbackDel(object chartData);
private void UICallback (object chartData)
{
if (InvokeRequired)
{
this.Invoke(new UICallbackDel(UICallback), chartData);
}
else
{
aButtonOnMyForm.Visible = false; //But the Form has been closed!
}
}
Любопытно, что этот код не вылетает.
Я установил точки останова в событии Form_Closed, и оно выполняет . Я не проверял, существует ли форма, например, объявив ее переменной класса. Но я думаю, что это так.
Итак, вопрос в том, что сборщик мусора будет собирать Форму только после завершения моей цепочки? Или что это происходит?