私はカスタムUserControlを含むウィンドウを持っています。 UserControlは、スレッドを終了できるように、それを含むウィンドウが閉じられたときを知る必要があります。WPF Window.Close()は、UserControl.Unloadedイベントをトリガーしません。
これを達成する方法について私が推測したのは、UserControlのUnloadedイベントを処理することです。ただし、アンロードされたイベントは、ユーザーが実際にウィンドウを閉じるためにクリックしたときに発生するように見えますが、プログラムでウィンドウ上でClose()メソッドを呼び出すときは表示されません。
参考までに、私のコードの関連部分のいくつかを次に示します。
MyWindow.xaml:
<Window x:Class="Namespace.MyWindow"
xmlns:controls="clr-namespace:Namespace.Controls">
<controls:MyControl/>
</Window>
MyControl.xaml:
<UserControl x:Class="Namespace.Controls.MyControl"
Unloaded="UserControl_Unloaded"/>
<!-- Stuff -->
</UserControl>
MyControl.xaml.cs:上記
void UserControl_Unloaded(object sender, RoutedEventArgs e)
{
// Stop the thread.
}
だから要約に、UserControl_Unloaded()メソッド"手動で"(alt-F4、赤い "X"などの)ウィンドウを閉じると呼び出されますが、コードの他の場所からは表示されません私はmyWindow.Close()
に電話します。何か案は?
ドキュメントから:アプリケーションのシャットダウンが開始された後、Unloadedイベントが発生しないことに注意してください。 ShutdownModeプロパティで定義された条件が発生すると、アプリケーションのシャットダウンが発生します。 Unloadedイベントのハンドラ内に、ウィンドウやUserControlなどのクリーンアップコードを配置すると、期待どおりに呼び出されないことがあります。 –