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オブジェクトを作成し実行しています。
コメントをお書きください