独自のスタートアップコードを定義する

WindowsForms では、ウインドウが表示されるまでに実施しておきたいコードは Program.cs の Main() に記述するのが定石でした。例えば画像入力ボードの初期化やデジタル入出力ボードの初期化などがそれにあたります。

WPFでは Program.cs がありませんし、それ以外のファイルにも Main() がありません。さて、どうしましょうか。

前置きが長くなってしまいました。ようやく具体的な説明にはいります。

App.xaml でスタートアップコードを指定します。デフォルトでは StartupUri="MainWindow.xaml" と書いてあるところを、Startup="スタートアップメソッド名"に書き換えます。

<Application x:Class="aaa.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:aaa"
             Startup="Application_Startup"> <!-- this is important. -->
    <Application.Resources>
         
    </Application.Resources>
</Application>
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace aaa
{
	public partial class App : Application
	{

		// App.xaml にて Startup="Application_Startup" を明示すること.
		private void Application_Startup( object sender, StartupEventArgs e )
		{

			// ウインドウ表示前にダイアログボックスを表示する.
			MessageBox.Show( "Application_Startup();" );

			// ウインドウを作成しつつ表示する.
			MainWindow wnd = new MainWindow();
			wnd.Show();

		}
	}
}

スタートアップメソッド名はなんでもいいです、MSDNでは Application_Starup としてありましたが、ApplicationStartup とか MyStartup のように、予約語とか予約メソッド名にかぶっていなければ、なんでもかまいません。

あとは、MainWindow wnd = new MainWindow(); より前までに自分のやりたいことを記述すればOKです。コード例ではウインドウが表示される前に、ダイアログボックスを表示します。つまり、デジタル入出力ボードの初期化などはここに書けばいいです。

試しに MainWindow wnd = new MainWindow(); より後に MessageBox.Show(); を書けば、挙動が変わりますので理解が深まると思います。