public class InputBuilder<TSource> : ZeroArgumentExpressionBuilder{ IObservable<TSource> input;
public InputBuilder(IObservable<TSource> input) { this.input = input; }
public override Expression Build(IEnumerable<Expression> arguments) { return Expression.Constant(input, typeof(IObservable<TSource>)); }}class Program{ static void Main(string[] args) { using (var reader = XmlReader.Create("workflow.bonsai")) { var serializer = new XmlSerializer(typeof(WorkflowBuilder)); var workflowBuilder = (WorkflowBuilder)serializer.Deserialize(reader);
var sourceNode = workflowBuilder.Workflow.Sources().First(); var inputBuilder = new InputBuilder<long>(Observable.Timer(TimeSpan.FromSeconds(1))); var inputNode = workflowBuilder.Workflow.Add(inputBuilder); workflowBuilder.Workflow.AddEdge(inputNode, sourceNode, new ExpressionBuilderArgument());
var workflow = workflowBuilder.Workflow.Build(); var observableFactory = Expression.Lambda<Func<IObservable<long>>>(workflow).Compile(); var subscription = observableFactory().Subscribe( x => Console.WriteLine("OnNext: {0}", x), ex => Console.WriteLine("OnError: {0}", ex.Message), () => Console.WriteLine("OnCompleted")); Console.WriteLine("Press ENTER to unsubscribe..."); Console.ReadLine(); subscription.Dispose(); } }}workflowBuilder.Workflow.SetWorkflowProperty("PropertyName", PropertyValue);var warp = InitializeQuadrangle(new Size(640, 480));
workflowBuilder.Workflow.SetWorkflowProperty("SourceWarp", warp);
static Point2f[] InitializeQuadrangle(Size size){ return new[] { new Point2f(0, 0), new Point2f(0, size.Height), new Point2f(size.Width, size.Height), new Point2f(size.Width, 0) };System.NotSupportedException: DoubleConverter cannot convert from System.Double.
workflowBuilder.Workflow.SetWorkflowProperty("ThresholdValue", 127.0);