2009-07-12 13 views
0

mvvmツールキットを使用してWPFアプリケーションを書きます。私が使用して別のウィンドウを開くボタンでコマンドを持っているのメインウィンドウで別のウィンドウを開くとWPFアプリがまだ起動しています

catView.ShowDialog(); 

まあ、私は(閉じるボタンまたはXを使用して)そのウィンドウを閉じて、私は、メインウィンドウを閉じると、 、アプリはまだ実行されていると私はそれを殺す必要があります。

2番目のウィンドウを開かないと、アプリケーションは正常に終了します。

なぜ別のウィンドウを開くとアプリを正常に閉じることができないのですか?

私は2番目のウィンドウの閉じるボタンでこれを持っている。一方

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

、私はこの方法(MVVMツールキットの方法)でアプリを起動します。

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

ありがとうございましたとても。

答えて

2

問題はおそらく、ウィンドウの開閉には関係ありませんが、そのウィンドウ内には何かがあります。

これは通常、アプリケーションを閉じるときに別のスレッドが実行されているときに、ウィンドウのコード(System.Threading.Thread、ThreadPool、BackgroundWorker、サードパーティコンポーネントなど)内に新しいスレッドを作成しているものがないかどうかを確認し、アプリケーションを閉じる前にすべてのバックグラウンドスレッドがシャットダウンされていることを確認してください。

また、別の(目に見えない)ウィンドウを開くことができるものを探します。プロセス間の通信メカニズムとしてウィンドウメッセージを非表示ウィンドウに使用するのが一般的です。

+0

面白いことはもう起こっていないということです。バグの原因となっていたウィンドウや、単に消え去ったウィンドウで何かを変更したのかどうかはわかりません。 ありがとうございます。 –

1

問題が発生しているかどうかわかりませんが、2番目のウィンドウでClose()を呼び出す必要はありません。 DialogResultを設定すると、自動的にウィンドウが閉じます。

+0

ウィンドウは閉じずに閉じることができますが、問題は解決しません。 Show()を使用しても、問題は解決されません。 –

3

Nirは正しいですが、スレッドはまだ別のウィンドウで実行されている可能性があります。

この問題を解決するには、ウィンドウが閉じるときにアプリケーションのスレッドディスパッチャーを終了します。

public Window1() 
{ 
    InitializeComponent(); 

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

これは適切なやり方でないと訂正されます。しかし、私のためにうまくいった。

PS。 他のウィンドウが別のスレッドで実行されるように設計されている場合は、Eugene Prystupaがこれを読んでください: running-wpf-application-with-multiple-ui-threads

関連する問題