C#のWPFでMainメソッドを編集する

C#のアプリケーションは必ず Mainメソッドから始まります。

(Mainメソッドをアプリケーションのエントリーポイントといいます)

 

WPFを使ったアプリケーションも当然Mainメソッドからスタートします。

しかしソースを眺めてみてもMainメソッドは見当たらず、MainWindowが作成されるところから始まるように感じます。

 

多くの場合、MainWindowが作成されてから様々な処理が実行されればいいので気にするケースは少ないのですが、場合によってはMainWindowが作成される前に何か処理したい事があるかもしれません。


通常Mainメソッドは自動生成される

通常WPFのアプリケーションは、app.xaml (app.xaml.cs)がコンパイルされる時に app.g.cs というソースを自動生成してからコンパイルします。

 

コンパイル後に生成される obj/Debug/フォルダを覗いてみると App.g.cs ファイルが確認できると思います。その中身を見てみると Mainメソッドが存在しそこからアプリケーションが実行されている事が確認できます。


app.g.csファイルの自動生成をやめる

自動生成をやめるには app.xaml のプロパティから設定を変更します。

 

 

 

 

 

ソリューションエクスプローラーから「App.xaml」を

見つけて右クリックしプロパティを開きます。

 

 

 

 

プロパティ画面のビルドアクション

ApplicationDefintion」から「Page」へ変更します。


Mainメソッドを作成する

 自動生成をやめただけでは Mainメソッドが無くなってしまいコンパイルが通りません。

App.xaml.csを開いてMainメソッドを以下のように追加しましょう。

    public partial class App : Application
    {
        [STAThread]
        public static void Main()
        {
            App app = new App();
            app.InitializeComponent();
            app.Run();
        }
    }

Mainメソッドは [STAThread] という属性を指定する必要があります。

お約束と思って付けましょう。

 

この属性はCOMオブジェクトを扱う時の管理方法のようなもの選択するもので、

シングルスレッドアパートメント (STA) とマルチスレッドアパートメント (MTA) がありますが、

WPFではSTAを利用する事になっているようです。

 

Mainメソッド内では、Appオブジェクトを作成し実行しています。