2010-02-17 5 views
1

나는이 같은 창을 만들 수 있습니다. MyWindow의 소멸자를 호출하기 위해 delete/destroy와 같은 것을 호출해야합니까?WPF 창 클래스 파괴

+0

왜 소멸자를 호출해야합니까? 간단한 정리 작업을 수행하는 경우 MyWindow에 IDisposable을 구현하고 Dispose 메서드에서 정리 작업을 수행하십시오. 나는 소멸자를 사용하는 것이 좋은 생각이라고 믿지 않는다. – Charlie

답변

3

가비지 수집기가 느껴질 때마다 C#에서 호출되는 "소멸자"또는 finalizer이 호출됩니다. System.GC.Collect()을 사용하여 가비지 수집기를 수동으로 트리거 할 수 있지만 you probably don't want to do this. USING 절은 때 호출

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

이 (wnd.Dispose을 만들 것입니다) : 당신은 다른 한편으로는() 폐기에 대해 이야기하면 당신은 "사용"절에 창을 만들어이 호출 될 수 있습니다 수행, 기본적으로 쓰기와 같은 것입니다 : -와 several more on StackOverflow

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

IDisposable 인터페이스의 사용에 대한 this question 도움이 될 수 있습니다.

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

이것은 내가 당신이 찾고있는 생각이다 중괄호, 후 창에 Dispose를 호출합니다. MyWindow 클래스는 IDisposable을 구현해야합니다.

+1

지나치게 과장하지 않아도 클래스는 이미 IDisposable을 구현합니다. 그것이해야 할 일은'Dispose'를 오버라이드하는 것입니다. –

+4

Robert : WPF Window 클래스는 IDisposable을 구현하지 않습니다. (관리되지 않는 리소스를 보유하지는 않습니다.) Charlie의 권리, IDisposable은 MyWindow 파생 클래스에서 구현해야합니다. – itowlson

+2

Pedantry fail .. – Charlie

0

작은 것이 하나 있는데, 창을 열고 소멸자라고 부르기를 원합니다. 그건 정말 말이되지 않습니다. 당신은 창을 닫아야한다. 그러면 소멸자가 암묵적으로 호출 될 것이다.

명시 적으로 호출하려는 경우 MyWindow 클래스에서 Dispose를 재정의해야합니다. 여기에서 명시 적으로 삭제하려는 모든 리소스를 정리할 수 있습니다.

+0

Windows가 닫힐 때까지'ShowDialog'가 반환되지 않습니다 - 그래서 당신의 답을 이해하지 못합니까? –

+0

그래서 대화 상자가 닫힐 때까지 'ShowDialog'가 반환되지 않으면 대화 상자가 여전히 파괴되지 않으면 어떻게 소멸자를 호출 할 수 있습니까? 그것이 내가하려는 것입니다. –