Когда уничтожается источник данных Windows Forms?

0

У меня есть класс, который реализует System::ComponentModel::INotifyPropertyChanged и служит в качестве источника данных. Назовите это SourceThing. Пусть говорят, что у него есть свойство String называемое Data. Он связан с элементом управления Windows Forms следующим образом:

SourceThing ^ mySourceThing = gcnew SourceThing();
myTextbox->DataBindings->Add("Text", mySourceThing, "Data");

Связывание работает так, как ожидалось. Однако деструктор SourceThing никогда не вызывается, даже если окно, содержащее текстовое поле, расположено (т. SourceThing деструктор окна, но экземпляр SourceThing никогда не уничтожается). Единственный способ, которым я могу заставить деструктор работать в SourceThing - использовать оператор delete на дескрипторе. Я бы предпочел не хранить ручки во всех источниках данных, когда кажется, что они должны быть уничтожены автоматически, когда форма уничтожена.

Приложение будет создавать и удалять эту конкретную форму много раз, основываясь на действиях пользователя, и иметь много экземпляров SourceThing плавающих вокруг, не является идеальным. Почему не SourceThing деструктор SourceThing уничтожении формы?

  • 1
    Нет, класс Binding довольно простой и не имеет одноразовых членов. Таким образом, у Winforms нет ни причины, ни механизма для его детерминированного определения. Поскольку вы добавили деструктор, вы можете его вызвать.
  • 0
    Понимаю. Дальнейшее чтение о сборке мусора в CLR говорит мне, что в зависимости от поведения Finalize плохой дизайн. Спасибо за вклад.
Теги:
winforms
c++-cli
visual-studio-2008

1 ответ

0

Я не уверен в этом, но я думаю, что компилятор создает метод Dispose() при определении деструктора в классе CLI C++.

Если это так, вы должны вызвать mySourceThing->Dispose() когда форма закрывается.

Надеюсь, поможет

  • 0
    Это то, что я пытаюсь избежать, но спасибо за вклад.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню