比方说,我有progrmatically创建这样我知道执行它是第一序列化对象ActivityBuilder
到XAML
如何在不序列化的情况下执行ActivityBuilder?
ActivityBuilder<int> ab = new ActivityBuilder<int>();
ab.Name = "Add";
ab.Properties.Add(new DynamicActivityProperty {Name = "Operand1", Type = typeof (InArgument<int>)});
ab.Properties.Add(new DynamicActivityProperty {Name = "Operand2", Type = typeof (InArgument<int>)});
ab.Implementation = new Sequence
{
Activities =
{
new WriteLine
{
Text =
new VisualBasicValue<string>(
"Operand1.ToString() + \" + \" + Operand2.ToString()")
}
}
};
一种方式的工作流。接下来,使用ActivityXamlServices
加载序列化的XAML
。为参数创建一个字典。使用WorkflowInvoker
或WorkflowApplication
执行它是否有任何方法来执行此工作流而无需将活动构建器转换/序列化为XAML?
WorkflowApplication和WorkflowInvoker将一个Activity作为输入执行。我能以某种方式直接使用activityBuilder.Implementation
与WorkflowApplication
或WorkflowInvoker
?
为什么我要这个?因为我们有用户用来创建和执行工作流的工作流设计器。用户还可以编程创建工作流程。工作流可以达到80MB大小。由于将80MB文件序列化并从XAML
进行反序列化,这会损害应用程序的内存。我想以某种方式跳过这一步并直接执行活动。
它有道理吗?
默认情况下VS设计者使用ActivityBuilder。我想你是在重新托管版本;我从来没有尝试过,但不能强迫它使用DynamicActivity而不是ActivityBuilder?只需将一个空的DynamicActivity序列化为Designer.Text。 – Joao 2012-02-15 11:40:10
那么,在运行时执行它的另一种方法是将ActivityBuilder转换为DynamicActivity。这只是几行代码,然后您可以像执行WorklowInvoker/WorkflowApplication一样执行DynamicActivity – Joao 2012-02-15 11:43:15
您可以指出我要编写哪些代码吗?我无法找到它 – 2012-02-15 11:56:01