しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

WPF と Main メソッド

普通に Visual Studio で WPF アプリケーションを開発しようとすると、App.xaml が自動的に作成されて Main メソッドを定義する必要が無くなります。

しかし、Main メソッドに付ける必要がある属性*1が使えなくなるので、App.xaml を使わずに Main メソッドを定義する必要が出てきます。

public static void Main(string[] args)
{
    Application app = new Application();
    app.Run(new MainWindow());
}

これで MainWindow を起動時に開くことができますが、リソースなどを使おうとするといろいろ面倒です。

そこで App.xaml のビルドアクションを ApplicationDefinition から Page に変更します。そうすると Main メソッドが自動的に生成されなくなります。

public static void Main(string[] args)
{
    App app = new App();
    app.InitializeComponent();
    app.Run();
}

後は同じように App.Run を呼べばいいんですが、InitializeComponent を呼ぶのを忘れないようにしましょう。省略しましたが STAThread を付けないと起動できませんよ。*2

*1:LoaderOptimization とか。

*2:System.Diagnostics.DebuggerNonUserCode も付けておいた方がデバッグの時に便利かもしれません。