У меня есть некоторый код в приложении WPF, который выглядит следующим образом:Вызов BeginInvoke из деструктора
public class MyTextBox : System.Windows.Controls.TextBox, IDisposable
{
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
Dispatcher.BeginInvoke((Action) delegate
{
// do work on member variables on the UI thread.
});
}
~MyTextBox()
{
Dispose(false);
}
}
Метод Dispose никогда не получать явно названный так деструктор называет. Похоже, что в этом случае объект будет уничтожен до того, как делегат в BeginInvoke начнет работать в потоке пользовательского интерфейса. Похоже, что он работает. Что здесь происходит? Это безопасно?
более интересный материал о финализаторов проверить [Когда все, что вы знаете, это неправильно, часть два] (http://ericlippert.com/2015/05/21/when-everything-you-know-is-wrong-part-two/) – Default
Это воскрешение объекта. Я никогда раньше этого не видел. Вероятно, ваш TextBox не должен * иметь * финализатор (что вы пытаетесь сделать?). – usr
Помимо плохой идеи, я не вижу в этом ничего хорошего ... –