次の方法で共有


NativeActivity 基本クラス

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

NativeActivityContext の使用

ワークフロー ランタイムの機能には、Execute 型の context パラメーターのメンバーを使用して、NativeActivityContext メソッド内からアクセスできます。 NativeActivityContextで使用できる機能は次のとおりです。

  • 引数と変数の取得と設定。

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

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

  • CancelChildCancelChildrenを使用して子の実行を取り消す。

  • CreateBookmarkRemoveBookmarkResumeBookmarkなどのメソッドを使用してアクティビティ ブックマークにアクセスします。

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

  • GetPropertyGetValueを使用して、アクティビティの実行プロパティと値プロパティにアクセスします。

  • ScheduleActionScheduleFuncを使用してアクティビティのアクションと関数をスケジュールする。

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

  1. OpenVisual 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));
        }