
Microsoft Windows Workflow Foundation 4.0 Cookbook
By :

In this task, we will create the same "HelloWorkflow" function workflow using pure C# code, beginning from a Console Application.
Create a Console Application project:
Create a new Console Application project under the Chapter01
solution. Name the project HelloCodeWorkflow
. The following screenshot shows the Console Application new project dialog:
Add reference to the
System.Activities
assembly:
By default, a new Console Application doesn't have reference to the System.Activities
assembly, due to which we need to perform this step.
Create workflow definition code:
Open Program.cs
file and change the code present as follows:
using System.Activities; using System.Activities.Statements; namespace HelloCodeWorkflow { class Program { static void Main(string[] args) { WorkflowInvoker.Invoke(new HelloWorkflow()); } } public class HelloWorkflow:Activity { public HelloWorkflow() { this.Implementation = () => new Sequence { Activities = { new WriteLine(){Text="Hello Workflow"} } }; } } }
Run it:
Set HelloCodeWorkflow
as StartUp
project and press Ctrl+F5 to run it. As expected, the result should be just like the previous result shown.
We use the following namespaces:
using System.Activities; using System.Activities.Statements;
Because WorflowInvoker
class belongs to System.Activities
namespace. Sequence
activity, WriteLine
activity belongs to System.Activities.Statements
. namespace.
public class HelloWorkflow:Activity { public HelloWorkflow() { this.Implementation = () => new Sequence { Activities = { new WriteLine(){Text="Hellow Workflow"} } }; } }
By implementing a class inherited from Activity, we define a workflow using imperative code.
WorkflowInvoker.Invoke(s);
This code statement loads a workflow instance up and runs it automatically. The WorkflowInvoker.Invoke
method is synchronous and invokes the workflow on the same thread as the caller.
WF4 also provides us a class DynamicActivity
by which we can create a workflow instance dynamically in the runtime. In other words, by using DynamicActivity
, there is no need to define a workflow class before initializing a workflow instance. Here is some sample code:
public static DynamicActivity GetWF() { return new DynamicActivity() { Implementation = () => new Sequence() { Activities ={ new WriteLine(){Text="Hello Workflow"} } } }; }
Change the font size
Change margin width
Change background colour