web-dev-qa-db-ja.com

WPFアプリケーションのエントリポイントは何ですか?

Mainメソッドは、C#コンソールアプリケーションのエントリポイントです。したがって、たとえば、いくつかのスレッドまたはサービスを開始する必要がある場合は、Mainメソッド内で開始します。

WPFプロジェクト内にMainメソッドが表示されないので、WPFアプリケーションのエントリポイントは何ですか?いくつかのスレッドまたはサービスを開始する必要がある場合、それらを開始するためのコードをどこに記述する必要がありますか?

UPDATE:この回答 は利用可能なソリューションをまとめていますが、各ソリューションの長所と短所は何ですか?

37
enzom83

メインのエントリポイントは、App.XamlのコードビハインドのOnStartupのオーバーライドです。

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        // here you take control
    }
}

他の興味深い点は、Application.OnActivate()およびMainWindowのLoadedおよびInitializedイベントです。

いくつかのスレッドまたはサービスを開始する必要がある場合、それらを開始するためのコードをどこに記述する必要がありますか?

それらのスレッド/サービスが必要としているものに依存します。

32
Henk Holterman

新しいプロジェクトウィザードを使用してVisual Studioで生成されるWPFスタンドアロンアプリケーションの場合、アプリケーションのエントリポイントは、App.g.cs(生成コード)で定義されたMain関数です。デフォルトのプロジェクトでは、これはpublic static void App.Mainメソッドです。

Check this

一般に、.NETアプリケーションは、エントリポイント(最初に呼び出される関数)として、パブリック/静的アクセス修飾子を持つMainという名前のメソッドを使用します(Mainがどのクラスにあるかに関係なく)。

アプリケーションにpublic static Mainメソッドを持つ複数のクラスがある場合、プロジェクトプロパティダイアログでエントリポイントを指定する必要があります。 [スタートアップオブジェクト]ドロップダウンで、起動時に呼び出す必要のあるMainメソッドを含むクラスを選択します。

42

WPFアプリケーションのMainは自動生成され、App.xamlファイルをバックアップする.csファイルの1つにあります。ソリューションエクスプローラーでApp.xaml-> App.xaml.cs-> App-> Main()を展開すると、Main()関数を含むApp.g.i.csソースファイルが表示されます。

このファイルは自動生成されるため、そこでMainを編集するのではなく、Main()関数を含むプロジェクトに新しい.csファイルを作成することをお勧めします。次に、プロジェクトのプロパティを変更して、正しいスタートアップオブジェクトを指定する必要があります。これは、プロジェクトプロパティの[アプリケーション]タブで行います。カスタムMain関数を含むクラスに設定します。

アプリケーションが正常に動作するようにする(メインウィンドウを表示するなど)ため、自動生成されたMainの内容を新しいものにコピーすることをお勧めします。

10
lordjeb

エントリポイントは通常App.xaml.csです。

理想的にはそこにコードを置くことを避けたい。代わりに、MVVMのビューモデルでそれらをインスタンス化してみてください。あなたの質問が証拠であるように、それは通常、ものを見つけるのが難しい場所です。

別の代替方法として、それらをヘルパークラスにロードし、app.xamlファイルにインスタンス化します。

2
kidshaw