ワークフロー デザイナーでアクティビティ デリゲートを定義および使用する方法

.NET Framework 4.5 RC には、すぐに使用できる InvokeDelegate アクティビティの新しいデザイナーが含まれています。このデザイナーは、ActivityActionActivityFunc<TResult> など、ActivityDelegate から派生するアクティビティにデリゲートを割り当てるために使用できます。

アクティビティ デリゲートを定義する

  1. Visual Studio で、[ファイル][新規作成][プロジェクト] の順にクリックします。左の [ワークフロー] ノードと右の [ワークフロー コンソール アプリケーション] テンプレートをクリックします。プロジェクトに名前を付け (必要な場合)、[OK] をクリックします。

  2. ソリューション エクスプローラーでプロジェクトを右クリックし、[追加][新しい項目] をクリックします。左の [ワークフロー] ノードと右の [アクティビティ] テンプレートをクリックします。新しいアクティビティに「MyForEach.xaml」という名前を付け、[OK] をクリックします。アクティビティによってワークフロー デザイナーが開きます。

  3. ワークフロー デザイナーで [引数] タブをクリックします。

  4. [引数の作成] をクリックします。新しい引数に「Items」という名前を付けます。

  5. [引数の型] 列で [配列: [T]] をクリックします。

  6. 型ブラウザーで [オブジェクト] をクリックします。[OK] をクリックします。

  7. [引数の作成] を再度クリックします。新しい引数に「Body」という名前を付けます。新しい引数の [方向] 列で [プロパティ] をクリックします。

  8. [引数の型] 列で [型の参照] をクリックします。

  9. 型ブラウザーで型名フィールドに「ActivityAction」と入力します。ツリー ビューで [ActivityAction<T>] をクリックします。表示されるドロップダウンで [オブジェクト] をクリックし、ActivityAction<Object> 型を引数に割り当てます。

  10. While アクティビティを、ツールボックスの [制御フロー] セクションからデザイナー画面にドラッグします。

  11. While アクティビティを選択し、[変数] タブをクリックします。

  12. [変数の作成] をクリックします。新しい変数に「Index」という名前を付けます。

  13. [変数の型] 列で [Int32] をクリックします。[スコープ][While][既定] 列を空欄のままにします。

  14. While アクティビティの条件プロパティの値を index < Items.Length; に設定します。

  15. InvokeDelegate アクティビティを、ツールボックスの [プリミティブ] セクションから While アクティビティの [本文] にドラッグします。

  16. デリゲート ドロップダウン リストで [本文] をクリックします。

  17. InvokeDelegate アクティビティの [プロパティ] グリッドで、デリゲートの引数プロパティの [...] をクリックします。

  18. Argument」という引数の [値] 列に「Items[Index]」と入力します。[OK] をクリックして [デリゲートの引数] ダイアログ ボックスを閉じます。

  19. Assign アクティビティを InvokeDelegate アクティビティの下の水平線にドラッグします。Assign アクティビティが作成されます。MyForEach アクティビティの [本文] セクションの 2 つのアクティビティを含むように、Sequence アクティビティが自動的に作成されます。[本文] セクションは 1 つのアクティビティだけを含めることができるため、シーケンスが必要になります。自動的に新しい Sequence アクティビティを作成することは .NET Framework 4.5 RC の新機能です。

  20. Assign アクティビティの追加先プロパティを index に設定します。Assign アクティビティのプロパティを index+1 に設定します。

カスタムの MyForEach アクティビティは、Items コレクションを通じて渡された値ごとに任意のアクティビティを 1 回呼び出し、コレクションの値をアクティビティの入力として使用します。

ワーク フローにカスタム アクティビティを使用する

  1. Ctrl キーと Shift キーを押しながら B キーを押して、プロジェクトをビルドします。

  2. ソリューション エクスプローラーで、デザイナーの Workflow1.xaml を開きます。

  3. MyForEach アクティビティをツールボックスからデザイナー画面にドラッグします。アクティビティは、プロジェクトと同じ名前のツールボックスのセクションにあります。

  4. MyForEach アクティビティの項目プロパティを new Object[] {1, "abc"} に設定します。

  5. WriteLine アクティビティを、ツールボックスの [プリミティブ] セクションから MyForEach アクティビティの [デリゲート:本文] セクションにドラッグします。

  6. WriteLine アクティビティのテキスト プロパティを Argument.ToString() に設定します。

ワーク フローの実行時に、コンソールには次のように表示されます。