環境
Windows 8 (Windows2012Serverでも同様の結果となりました)
検証用アプリ
WindowとListBoxのInitialized, Loaded, Unloadedイベントを捕捉するようにしただけのアプリ
MainWindow.xaml
<Window x:Class="TestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Initialized="Window_Initialized"
Loaded="Window_Loaded"
Unloaded="Window_Unloaded">
<Grid>
<ListBox Name="list"
Initialized="list_Initialized"
Loaded="list_Loaded"
Unloaded="list_Unloaded"/>
</Grid>
</Window>
MainWindow.xaml.cs
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_Initialized(object sender, EventArgs e)
{
list.Items.Add(DateTime.Now.ToString("hh:mm:ss.fff") + " Window_Initialized");
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
list.Items.Add(DateTime.Now.ToString("hh:mm:ss.fff") + " Window_Loaded");
}
private void Window_Unloaded(object sender, RoutedEventArgs e)
{
list.Items.Add(DateTime.Now.ToString("hh:mm:ss.fff") + " Window_Unloaded");
}
private void list_Initialized(object sender, EventArgs e)
{
list.Items.Add(DateTime.Now.ToString("hh:mm:ss.fff") + " list_Initialized");
}
private void list_Loaded(object sender, RoutedEventArgs e)
{
list.Items.Add(DateTime.Now.ToString("hh:mm:ss.fff") + " list_Loaded");
}
private void list_Unloaded(object sender, RoutedEventArgs e)
{
list.Items.Add(DateTime.Now.ToString("hh:mm:ss.fff") + " list_Unloaded");
}
}
検証開始
- 検証用アプリを実行する
検証用アプリのウインドウが表示され、Loadedイベントまで実行されたことがわかる - リモートデスクトップ接続
検証用アプリを実行している環境に対して、リモートデスクトップ接続を試みる
- リモートデスクトップで接続後の検証用アプリの様子
ListBoxのUnloadedイベントとLoadedイベントが実行されたことがわかる
WindowのUnloadedイベントは呼ばれず、ControlだけUnloaded, Loadedが実行される模様。
開発中のアプリで「リモートデスクトップした時になんかおかしな動きをしている』と言われて調べて初めてわかりました(常識?)
Windowが閉じられるまで発生しないだろうと思っていたので、とあるコントロールのUnloadedイベントに終了処理を書いていたのがいけなかったみたいです。