In this task, we will create a WF program that can return a result to the workflow host.
Create a new Workflow Console Application under the
Chapter01
solution; name the project asUseOutArgument
.Author a workflow:
Author the workflow shown in the following screenshot. Here are the detailed actions:
Drag a
Sequence
activity from Toolbox to the designer panel.In the bottom of the designer panel, click the Arguments button, and click Create Argument to create an
OutArgument
string namedOutMessage
.Drag two
WriteLine
activities from Toolbox into theSequence
activity and fill the textboxes with "Start…" and "End" respectively.Drag an
Assign
activity from Toolbox to the designer panel. Fill the right expression box withOutArgument
asOutMessage
, whereas fill the right expression box with the following string: This is a message from workflow.
Write code to host the workflow:
Open
Program.cs
file and change the host code as follows:Run it:
Set
UseOutArgument
asStartup
project. Press Ctrl+F5 to build and run the workflow without debugging. The application should run in a console window and print the message as shown in the next screenshot:
Look at the following code snippet:
IDictionary<string,object> output= WorkflowInvoker.Invoke(new Workflow1()); Console.WriteLine(output["OutMessage"]);
OutMessage
is the name of OutArgument
we defined in Workflow1.xaml
. the WorkflowInvoder.Invoke
method will return a IDictionary
type object.
There is a third type of workflow argument: InOutArgument
. It is a binding terminal that represents the flow of data into and out of an activity. In most cases, we can use InOutArgument
instead of InArgument
and OutArgument
. But there are still some differences—for example, we cannot assign a string to InOutArgument
, while it is allowed to assign a string to InArgument
directly in the host program.