2009-07-12 6 views
0

mvvm toolkint를 사용하여 WPF 애플리케이션을 쓰고 있습니다. 내가 사용하여 다른 창을 열고 버튼의 명령이 메인 창에서다른 창을 열면 내 WPF 앱이 계속 실행 중입니다.

: 음

catView.ShowDialog(); 

, 나는 (닫기 버튼 또는 X를 사용하여) 그 창을 닫고 나는 주 창을 닫을 때 , 애플 리케이션은 여전히 ​​실행하고 나는 그것을 죽일 필요가있다.

두 번째 창을 열지 않으면 앱이 정상적으로 종료됩니다.

왜 다른 창을 열면 응용 프로그램을 정상적으로 닫을 수 없습니까?

Views.MainView view = new Views.MainView(); 
view.DataContext = new ViewModels.MainViewModel(); 
view.Show(); 

당신을 감사합니다, 나는 이런 식으로 (MVVM 툴킷 방법) 응용 프로그램을 시작하는 한편

this.DialogResult = true; 
this.Close(); 

:

나는이 두 번째 창의 닫기 버튼에있다 흠뻑.

답변

2

문제는 아마도 창을 여는 것과 관련이 없지만 그 창 안에는 문제가 있습니다.

일반적으로 응용 프로그램을 닫을 때 다른 스레드가 실행 중이면 System.Threading.Thread, ThreadPool, BackgroundWorker 및 타사 구성 요소를 포함하여 창 코드 내에 새 스레드를 만들 수 있는지 확인하십시오. , 응용 프로그램을 종료하기 전에 모든 백그라운드 스레드가 종료되었는지 확인하십시오 (적어도 백그라운드 스레드로 표시하지 않으려면 종료 할 수 없습니다).

또 다른 (보이지 않는) 창을 열 수있는 항목을 찾으십시오. 프로세스 간 통신 메커니즘으로 보이지 않는 창에 창 메시지를 사용하는 것이 일반적입니다. 다시 그럴 수있는 제 3 자 코드를 찾습니다.

+0

재미있는 점은 더 이상 아무 일도 일어나지 않는다는 것입니다. 버그를 일으키거나 단순히 사라지는 창문에서 뭔가를 바꿨는지 모르겠습니다. 감사합니다. –

1

문제가 발생했는지 여부는 알 수 없지만 두 번째 창에서 Close()으로 전화하지 않아도됩니다. DialogResult을 설정하면 창이 자동으로 닫힙니다.

+0

Windows는 Close()로 닫히지 만 문제가 해결되지 않습니다. Show()를 사용해도 문제는 지속됩니다. –

3

Nir이 맞으므로 스레드가 다른 창에서 실행 중일 수 있습니다.

창이 닫힐 때 응용 프로그램의 스레드 디스패처를 종료하여이 문제를 해결할 수 있습니다.

public Window1() 
{ 
    InitializeComponent(); 

    // This line should fix it: 
    this.Closed += (sender, e) => this.Dispatcher.InvokeShutdown(); 
} 

올바른 방법이 아닌 경우 수정 해 드리겠습니다. 그래도 나를 위해 잘 일했다.

추신. 다른 윈도우가 다른 스레드에서 실행되도록 설계된 경우 다음을 읽으십시오. Eugene Prystupa : running-wpf-application-with-multiple-ui-threads

관련 문제