[WPF] Applicationクラス学習の第26章 - アプリケーションのライフサイクル

オリジナル: [WPF] Applicationクラスの学習の第26章-アプリケーションのライフサイクル

  WPFでは、アプリケーションは、シンプルなライフサイクルを受けることになります。アプリケーションが起動した後、すぐにアプリケーションが実行されている場合には、様々なアプリケーションをトリガ、アプリケーションオブジェクトを作成します、あなたは、これらのイベントのいくつかを監視するために選択することができます。最後に、時にアプリケーションオブジェクトのリリースは、アプリケーションが終了します。

まず、アプリケーションオブジェクトを作成

  Applicationクラスを使用する最も簡単な方法は、それを手動で作成することです。次の例が示す最小限のプログラム:で、アプリケーションのエントリ(main()メソッド)でメインウィンドウという名前のウィンドウを作成し、新しいアプリケーションを起動します。

  本質的には、Visual Studioのアプリケーションクラスモデルと同じモデルは、ウィンドウを使用しました。出発点XAMLは、デフォルトではApp.xaml命名されたテンプレートで、それは次のようになります。

< アプリケーションX:クラス= "TestApplication.App" 
             のxmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
             のxmlns:X = "http://schemas.microsoft.com/winfx/2006 / XAML」
             StartupUri = "MainWindow.xaml" > 
</ アプリケーション>

  「ではXAML [WPF]第IV章調査の負荷とコンパイル」XAMLのクラス属性要素の使用から派生クラスを作成し、導入しました。したがって、クラスはApplicationクラスの作成から導出され、TestApplication.Appという名前のクラスが(TestApplicationは、クラスの名前空間の定義でもあるプロジェクト名、で、アプリケーションは、Visual Studioアプリケーション名でカスタムクラスから派生しています。ご希望の場合、クラス名)は、任意のより興味深いコンテンツすることができます。

  アプリケーションラベルはまた、カスタム・アプリケーションのクラスを作成し、メインウィンドウに代わってStartupUri XAMLドキュメントを決定するためにプロパティを設定されていません。したがって、いかなるタイムコードがこの自動的パーサーをインスタンス化--XAMLウィンドウで表示されません。

  窓のような、アプリケーションクラスは、コンパイル時に一緒に融合された、二つの別々の部分で定義されています。自動生成部は、プロジェクト内に表示されていないが、メインを含む部分()の入口は、アプリケーション・コードを起動します。このセクションでは、次のようになります。

コードをコピー
パブリック クラスのApp:アプリケーション
    { 
        [STAThread] 
        公共の 静的な 無効メイン()
        { 
            プログラムアプリ = 新しいプログラム(); 
            app.MainWindow = 新しいメインウィンドウ(" MainWindow.xaml " ); 
            app.MainWindow.ShowDialog(); 
        } 
    }
コードをコピー

  あなたが本当に作成したカスタムアプリケーションクラスXAMLテンプレートを見ることに興味がある場合は、プロジェクトディレクトリDebugフォルダに\ App.g.csファイルをOBJ位置見つけることができます。

  カスタムアプリケーションクラス手書きコードと自動的に生成されたコードとの間の唯一の違いは、ここで自動的に生成されたクラスを与え、代わりにメイン・ウィンドウプロパティまたはフォームの設定、StartupUri属性れる)(実験に渡されるパラメータとして、以下のものです方法。ただ、この方法を使用してカスタムアプリケーションクラスを作成するために自由に、同じURIの形式を使用します。あなたは、XAMLドキュメントのオブジェクトの相対URIを作成する必要がBAMLリソースはアセンブリのアプリケーションに埋め込まれて(XAML文書は、プロジェクトの名前を翻訳したものです。リソースの名前は、元のXAMLファイルの名前です。以上たとえば、アプリケーションがリソースコンパイルXAMLドキュメントが含まれているのMainWindow.xaml)という名前のリソースが含まれています。

  例えばApp.xaml.cs.、アプリケーション・クラス・ファイルがプロジェクトに格納された第2のセクション定義から このセクションでは、空に、最初は、追加するイベントの開発者を処理するコードが含まれています。

公共 部分 クラスアプリ:アプリケーション
    { 
    }

  部分的に融合一緒に、自動クラス生成アプリケーションコードによって、このドキュメント。

第三に、アプリケーションが閉じられていますか

  一般的には、限り、まだウィンドウが閉じられていないとして、Applicationクラスは、アクティブなアプリケーションを維持します。これは、望ましい行動、調整可能なApplication.ShutdownModeプロパティではない場合。Applicationオブジェクトを手動でインスタンス化する場合は、ファイル名を指定して実行()メソッドを呼び出す前にセットShutdownModeプロパティにする必要があります。あなたはApp.xamlファイルを使用している場合は、単にXAMLファイルでShutdownModeプロパティを設定します。

  次の表に示すように、シャットダウン・モードの3つのオプションがあります:

ShutdownMode列挙値テーブル

   あなたがOnMainWindowClose方法を使用したい、とApp.xamlファイルを使用している場合たとえば、あなたは以下を追加する必要があります。

< アプリケーションX:クラス= "TestApplication.App" 
             のxmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
             のxmlns:X = "http://schemas.microsoft.com/winfx/2006 / XAML」
             StartupUriは= "MainWindow.xaml" ShutdownModeは= "OnMainWindowClose" > 
</ アプリケーション>

  かかわらず、あなたが選択したクローズド方式の、あなたは常にあなたがシャットダウン()メソッドを呼び出したときに、すぐに、当然のことながら(アプリケーションを終了Application.Shutdown()メソッドを使用することができ、アプリケーションがすぐに実行を停止しない場合があります。コールApplication.Shutdown()メソッドは、アプリケーションが発生します。 run()メソッドはすぐに戻りますが、他のコードのmain()メソッドまたはイベントApplication.Exit)に応じて実行し続けることができます。

第四に、アプリケーションイベント

  最初は、App.xaml.csファイルには、任意のコードが含まれていません。いいえコードがしますが、ハンドルのアプリケーションイベントにコードを追加することができます。Applicationクラスは、いくつかの非常に便利なイベントが用意されています。以下の表は、それらのいくつかの重要性を示しています。

表アプリケーションイベント

    イベントを扱うときに2つのオプションがあります:関連するイベントハンドラまたは保護されたメソッドを書き換えます。あなたは、イベントハンドラを関連付けるデリゲートコードを使用せずに、アプリケーションのイベントを処理することを選択していますが、イベントハンドラを関連付ける機能App.xamlファイルを使用することができます。たとえば、イベントハンドラを持っている場合:

コードをコピー
プライベート 無効 Application_DispatcherUnhandledException(オブジェクト送信者、System.Windows.Threading.DispatcherUnhandledExceptionEventArgs E)
        { 
            MessageBox.Show(" Anが未処理"。(+ e.Exception.GetType()ToStringメソッド)+
                 " 例外がキャッチされ、無視されました。" ); 
            e.Handled = ; 
        }
コードをコピー

  XAMLは、上記の次のイベントハンドラを接続するために使用することができます。

コードをコピー
< アプリケーションX:クラス= "TestApplication.App" 
             のxmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
             のxmlns:X = "http://schemas.microsoft.com/winfx/2006 / XAML」
             StartupUriは= "MainWindow.xaml" ShutdownModeは= "" OnMainWindowClose DispatcherUnhandledException = "Application_DispatcherUnhandledException" > 
    < Application.Resources > 
         
    </ Application.Resources > 
</ アプリケーション>
コードをコピー

  各アプリケーションイベントについては、イベントを高めるために、適切なメソッドを呼び出すことができます。このメソッドの名前は、単にプレフィックスオンの前で、そのためスタートアップが()、[終了となりフォーカス喪失時()、およびその上OnStartupになった、イベントの名前です。.NETでこの方法では非常に一般的です。唯一の例外はDispatcherExceptionUnhandledイベントです - イベントがそう常にイベントハンドラを使用する必要が該当するOnDispatcherExceptionUnhandled()メソッド、ではありません。

  以下に防止システムとアプリケーション自体をシャットダウンした、OnSessionEnding()メソッドをオーバーライドするカスタムアプリケーションクラスであり、そして場合は、適切なフラグを設定しません。

コードをコピー
公共 部分 クラスのApp:アプリケーション
    { 

        プライベート ブール unsavedData = ;
        パブリック ブールUnSavedDataは
        { 
            取得 { リターンunsavedDataを。}
             集合 {unsavedData = 値。} 
        } 
        保護 オーバーライド ボイドOnStartup(StartupEventArgs E)
        { 
            塩基.OnStartup(E); 
            unsavedDataは = ; 
        } 

        保護された オーバーライド 無効OnSessionEnding(SessionEndingCancelEventArgs E)
        { 
            塩基.OnSessionEnding(E);
            もし(unsavedData)
            { 
                e.Cancel = 
                MessageBox.Show(
                    アプリケーションは、結果として閉鎖されることを試み、」 + 
                    e.ReasonSessionEnding.ToString() +
                     あなたが保存されていないデータを持っているよう.Thisは、許可されていません。); 
            } 
        } 
}
コードをコピー

  塗布法を書き換える場合、基底クラスの実装では、好ましくは、最初の呼び出し。典型的には、知識を達成するための基本クラスは、対応するアプリケーションイベントにつながります。

  明らかに、この技術を達成するために、より洗練された方法は、メッセージボックスを使用していないが、ユーザが継続(アプリケーションやウィンドウシステムを終了します)、またはシャットダウンをキャンセルする選択することができますいくつかの確認のダイアログボックスが表示されるはずです。

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/12285977.html