次の方法で共有


NativeActivity の基本クラス

NativeActivity はプロテクト コンストラクターを持つ抽象クラスです。 CodeActivity と同様に、NativeActivity は、Execute メソッドを実装して、強制的な動作を記述するときに使用します。 CodeActivity とは異なり、NativeActivity からは、NativeActivityContext メソッドに渡される Execute オブジェクトを介して、ワークフロー ランタイムの公開されているすべての機能にアクセスできます。

NativeActivityContext の使用

ワークフロー ランタイムの機能は、Execute 型の context パラメーターを使用して、NativeActivityContext メソッド内からアクセスできます。 NativeActivityContext を介して、以下のような機能を使用できます。

  • 引数と変数を取得および設定する。

  • ScheduleActivity を使用して子のアクティビティのスケジュールを設定する。

  • Abort を使用してアクティビティの実行を中止する。

  • CancelChild および CancelChildren を使用して子の実行を取り消す。

  • CreateBookmarkRemoveBookmark、および ResumeBookmark などのメソッドを使用して、アクティビティのブックマークにアクセスする。

  • Track を使用したカスタムの追跡機能。

  • GetProperty および GetValue を使用して、アクティビティの実行プロパティと値プロパティにアクセスする。

  • ScheduleAction および ScheduleFunc を使用してアクティビティのアクションと機能のスケジュールを設定する。

NativeActivity から継承するカスタム アクティビティを作成するには

  1. Visual Studio 2010 を開きます。

  2. [ファイル][新規作成][プロジェクト] の順に選択します。 [プロジェクトの種類] ウィンドウの [Visual C#] の下にある [ワークフロー 4.0] を選択し、 [v2010] ノードを選択します。 [テンプレート] ウィンドウで [アクティビティ ライブラリ] をクリックします。 新しいプロジェクトに HelloActivity という名前を付けます。

  3. HelloActivity プロジェクト内の Activity1.xaml を右クリックして、 [削除] を選択します。

  4. HelloActivity プロジェクトを右クリックして、 [追加][クラス] の順に選択します。 新しいクラスに HelloActivity.cs という名前を付けます。

  5. HelloActivity.cs ファイルで、次の using ディレクティブを追加します。

    using System.Activities;
    using System.Activities.Statements;
    
  6. クラス宣言に基本クラスを追加することにより、新しいクラスで NativeActivity から継承します。

    class HelloActivity : NativeActivity
    
  7. Execute メソッドを追加して、このクラスに機能を追加します。

    protected override void Execute(NativeActivityContext context)
    {
        Console.WriteLine("Hello World!");
    }
    
  8. CacheMetadata メソッドをオーバーライドして適切な Add メソッドを呼び出し、カスタム アクティビティの変数、引数、子およびデリゲートについてワークフロー ランタイムに通知します。 詳細については、NativeActivityMetadata クラスを参照してください。

  9. NativeActivityContext オブジェクトを使用してブックマークをスケジュールします。 ブックマークを作成、スケジュール、および再開する方法の詳細については、「Bookmarks」を参照してください。

    protected override void Execute(NativeActivityContext context)
        {
            // Create a Bookmark and wait for it to be resumed.
            context.CreateBookmark(BookmarkName.Get(context),
                new BookmarkCallback(OnResumeBookmark));
        }