![](https://image.jimcdn.com/app/cms/image/transf/none/path/sbabc3a4f4a68ba4b/image/i958bc3b002d982b1/version/1680501621/image.png)
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 のプロパティから設定を変更します。
![](https://image.jimcdn.com/app/cms/image/transf/none/path/sbabc3a4f4a68ba4b/image/i84303aefeca58451/version/1522989756/image.png)
ソリューションエクスプローラーから「App.xaml」を
見つけて右クリックしプロパティを開きます。
![](https://image.jimcdn.com/app/cms/image/transf/dimension=289x1024:format=png/path/sbabc3a4f4a68ba4b/image/ide8feb573c26a5b5/version/1522989756/image.png)
プロパティ画面のビルドアクションを
「ApplicationDefintion」から「Page」へ変更します。
Mainメソッドを作成する
自動生成をやめただけでは Mainメソッドが無くなってしまいコンパイルが通りません。
![](https://image.jimcdn.com/app/cms/image/transf/dimension=445x10000:format=png/path/sbabc3a4f4a68ba4b/image/id09a5fadd3f35448/version/1522989178/image.png)
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オブジェクトを作成し実行しています。
コメントをお書きください