Разрушение класса окон WPF - PullRequest
       5

Разрушение класса окон WPF

1 голос
/ 17 февраля 2010

Я создаю окно, подобное этому:

if (someCondition)   
{  
   MyWindow wnd = new MyWindow();  
   wnd.Owner = this;  
   wnd.ShowDialog();  
}  

Я хочу, чтобы деструктор MyWindow вызывался в закрывающей фигурной скобке, но это не так. Нужно ли вызывать что-то вроде удаления / уничтожения для вызова деструктора MyWindow?

Ответы [ 3 ]

3 голосов
/ 17 февраля 2010

«Деструктор» или финализатор , как он вызывается в C #, вызывается всякий раз, когда чувствует себя как сборщик мусора. Вы можете запустить сборщик мусора вручную, используя System.GC.Collect () , но вы, вероятно, не хотите делать это . Если вы говорите о Dispose () с другой стороны, вы можете сделать так, чтобы это вызывалось, создав окно в предложении «using»:

using (var wnd = new MyWindow())
{
    wnd.Owner = this;  
    wnd.ShowDialog(); 
}

Это приведет к вызову wnd.Dispose (), когда будет выполнено предложение using, и будет в основном таким же, как и запись:

var wnd = new MyWindow(); 
wnd.Owner = this;  
wnd.ShowDialog();     
wnd.Dispose(); 

Об использовании интерфейса IDisposable этот вопрос может быть полезен - и еще несколько на StackOverflow .

1 голос
/ 17 февраля 2010
using (MyWindow wnd = new MyWindow())
{
   wnd.Owner = this;
   wnd.ShowDialog();
}

Это вызовет Dispose в вашем окне после фигурной скобки, что, я думаю, вы ищете. Ваш MyWindow класс должен будет реализовать IDisposable.

0 голосов
/ 17 февраля 2010

Одна маленькая вещь, вы открываете окно и затем хотите вызвать его деструктор. Это на самом деле не имеет смысла. Вы должны закрыть окно, и тогда его деструктор будет вызван неявно.

Если вы хотите вызвать его явно, вам следует переопределить Dispose в вашем классе MyWindow. Там вы можете очистить любые ресурсы, которые хотите явно удалить.

...