LoginSignup
11
11

More than 5 years have passed since last update.

Windowsでリモートデスクトップ接続すると実行中のWPFアプリケーションのUnloadedイベントが発生する

Posted at

環境

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");
        }
    }

検証開始

  1. 検証用アプリを実行する
    wpf_1.png
    検証用アプリのウインドウが表示され、Loadedイベントまで実行されたことがわかる
  2. リモートデスクトップ接続
    検証用アプリを実行している環境に対して、リモートデスクトップ接続を試みる
    rdc_1.png
  3. リモートデスクトップで接続後の検証用アプリの様子
    wpf_2.png
    ListBoxのUnloadedイベントとLoadedイベントが実行されたことがわかる
    WindowのUnloadedイベントは呼ばれず、ControlだけUnloaded, Loadedが実行される模様。

開発中のアプリで「リモートデスクトップした時になんかおかしな動きをしている』と言われて調べて初めてわかりました(常識?)
Windowが閉じられるまで発生しないだろうと思っていたので、とあるコントロールのUnloadedイベントに終了処理を書いていたのがいけなかったみたいです。

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11