ワークフロー デザイナーでアクティビティ デリゲートを定義および使用する
.NET Framework 4.5 には、InvokeDelegate アクティビティのための独創的なデザイナーが含まれています。 このデザイナーを使用すると、ActivityDelegate や ActivityAction など、ActivityFunc<TResult> から派生するアクティビティにデリゲートを割り当てることができます。
アクティビティ デリゲートの定義
新しいワークフロー コンソール アプリケーション プロジェクトを作成します。
Note
[ワークフロー] プロジェクト テンプレートが表示されない場合は、先に Visual Studio の Windows Workflow Foundation コンポーネントをインストールします。 詳細については、「Windows Workflow Foundation をインストールする」を参照してください。
ソリューション エクスプローラーでプロジェクトを右クリックし、[追加]>[新しい項目] を選択します。 [ワークフロー] カテゴリを選択し、[アクティビティ] 項目テンプレートを選択します。 新しいアクティビティに「MyForEach.xaml」という名前を付け、[OK] をクリックします。
アクティビティがワークフロー デザイナーで開きます。
ワークフロー デザイナーで [引数] タブをクリックします。
[Create Argument] (引数の作成) をクリックします。 新しい引数に「Items」という名前を付けます。
[引数の型] 列で [配列: [T]] を選択します。
型ブラウザーで [オブジェクト] を選択し、[OK] を選択します。
もう一度 [引数の作成] をクリックします。 新しい引数に「Body」という名前を付けます。 新しい引数の [方向] 列で [プロパティ] を選択します。
[引数の型] 列で [型の参照] をクリックします。
型ブラウザーで [型の名前] フィールドに「ActivityAction」と入力します。 ツリー ビューで ActivityAction<T> を選択します。 表示されたドロップダウンで [オブジェクト] を選択し、ActivityAction<Object> 型を引数に割り当てます。
While アクティビティを、ツールボックスの [制御フロー] セクションからデザイナー画面にドラッグします。
While アクティビティを選択し、[変数] タブをクリックします。
[変数の作成] を選択します。 新しい変数に「Index」という名前を付けます。
[変数の型] 列で [Int32] を選択します。 [スコープ] を [While] のままにし、[既定] 列を空欄のままにします。
While アクティビティの Condition プロパティを index < Items.Length; に設定します。
InvokeDelegate アクティビティを、ツールボックスの [プリミティブ] セクションから While アクティビティの Body にドラッグします。
[デリゲート] ドロップダウンで [Body] を選択します。
InvokeDelegate アクティビティの [プロパティ] グリッドで、[デリゲート引数] プロパティの [...] ボタンをクリックします。
Argument という引数の [値] 列に「Items[Index]」と入力します。 [OK] をクリックして [DelegateArguments] ダイアログ ボックスを閉じます。
Assign アクティビティを InvokeDelegate アクティビティの下の水平線にドラッグします。 Assign アクティビティが作成されます。また、MyForEach アクティビティの Body セクションに 2 つのアクティビティを含めるように Sequence アクティビティが自動的に作成されます。 Body セクションに含めることができるアクティビティは 1 つだけのため、シーケンスが必要になります。 新しい Sequence アクティビティの自動作成は .NET Framework 4.5 の新機能です。
Assign アクティビティの To プロパティを index に設定します。 Assign アクティビティの Value プロパティを index+1 に設定します。
カスタムの MyForEach アクティビティは、Items コレクションを通じて渡された値ごとに任意のアクティビティを 1 回呼び出し、コレクション内の値をアクティビティの入力として使用します。
ワーク フローでのカスタム アクティビティの使用
Ctrl + Shift + B キーを押して、プロジェクトをビルドします。
ソリューション エクスプローラーで、Workflow1.xaml をデザイナーで開きます。
MyForEach アクティビティをツールボックスからデザイナー画面にドラッグします。 アクティビティは、プロジェクトと同じ名前のツールボックスのセクションにあります。
MyForEach アクティビティの Items プロパティを new Object[] {1, "abc"} に設定します。
WriteLine アクティビティを、ツールボックスの [プリミティブ] セクションから MyForEach アクティビティの Delegate:Body セクションにドラッグします。
WriteLine アクティビティの Text プロパティを Argument.ToString() に設定します。
ワーク フローを実行すると、次の出力がコンソールに表示されます。
1abc