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

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

アクティビティ デリゲートの定義

  1. 新しいワークフロー コンソール アプリケーション プロジェクトを作成します。

    Note

    [ワークフロー] プロジェクト テンプレートが表示されない場合は、先に Visual Studio の Windows Workflow Foundation コンポーネントをインストールします。 詳細については、「Windows Workflow Foundation をインストールする」を参照してください。

  2. ソリューション エクスプローラーでプロジェクトを右クリックし、[追加]>[新しい項目] を選択します。 [ワークフロー] カテゴリを選択し、[アクティビティ] 項目テンプレートを選択します。 新しいアクティビティに「MyForEach.xaml」という名前を付け、[OK] をクリックします。

    アクティビティがワークフロー デザイナーで開きます。

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

  4. [Create Argument] (引数の作成) をクリックします。 新しい引数に「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 アクティビティの Condition プロパティを index < Items.Length; に設定します。

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

  16. [デリゲート] ドロップダウンで [Body] を選択します。

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

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

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

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

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

ワーク フローでのカスタム アクティビティの使用

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

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

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

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

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

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

ワーク フローを実行すると、次の出力がコンソールに表示されます。

1abc