Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Prior to the release candidate for .Net Framework v4, it was allowed to use arguments of a reference type with no wrapping or transformation. However, this led to some confusion concerning how reference types were passed to multiple instances of a workflow, so in the release version of .Net 4, some additional marshalling is needed, requiring the use of either LambdaValue<> or VisualBasicValue<> to pass the argument into the workflow.
For a list of changes between Beta 2 and RC for Windows Workflow Foundation, see the following entry:
http://blogs.msdn.com/b/endpoint/archive/2010/02/10/4-0-beta2-rc-wcf-wf-breaking-changes.aspx
In the following example, a TextBoxWriter (a custom implementation of System.IO.TextWriter that writes to a TextBox control on a form) is passed into a workflow to be used as the output stream for a WriteLine activity. A LambdaValue<> activity is used to assign the reference object to the activity; it is also used to pass the reference type into the workflow in the first place.
Hosting code:
var workflow = new MyWorkflow();
workflow.Writer = new LambdaValue<TextWriter>(context=>new TextBoxWriter(textBox1));
WorkflowInvoker.Invoke(workflow);
Workflow code:
public class MyWorkflow : Activity
{
public InArgument<TextWriter> Writer { get; set; }
public MyWorkflow()
{
this.Implementation = () => new WriteLine()
{
Text = "Hello World",
TextWriter = new LambdaValue<TextWriter>(context => Writer.Get(context))
};
}
}