Скажем, у меня есть рабочий процесс, созданный progrmatically как этотКак выполнить 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()")
}
}
};
Один из способов я знаю, чтобы выполнить это в первую сериализации ActivityBuilder
объекта в XAML
. Затем загрузите сериализованный XAML
, используя ActivityXamlServices
. Создайте словарь для параметров. Выполните его с помощью WorkflowInvoker
или WorkflowApplication
Есть ли способ выполнить этот рабочий процесс без необходимости конвертировать/сериализовать построитель операций в XAML?
WorkflowApplication и WorkflowInvoker принимает активность как ввод для выполнения. Могу ли я как-то использовать activityBuilder.Implementation
напрямую с WorkflowApplication
или WorkflowInvoker
?
Почему я хочу этого? Потому что у нас есть дизайнер рабочего процесса, который пользователь использует для создания и выполнения рабочего процесса. Пользователь также создает рабочий процесс. Рабочий объем может составлять до 80 МБ. Это вредит памяти приложения из-за сериализации и де-сериализации файлов размером 80 МБ в XAML
. Я хочу как-то пропустить этот шаг и непосредственно выполнить активность.
Имеет ли смысл?
По умолчанию VS дизайнер использует ActivityBuilder. Я предполагаю, что вы просматриваете повторную версию; Я никогда не пробовал это, но не могу ли вы просто заставить его использовать DynamicActivity вместо ActivityBuilder? Просто дайте сериализацию пустой DynamicActivity для Designer.Text. – Joao
Ну, еще один способ сделать это во время выполнения - преобразовать ActivityBuilder в DynamicActivity. Это всего лишь несколько строк кода, и вы можете выполнить DynamicActivity, как обычно, с WorklowInvoker/WorkflowApplication. – Joao
Можете ли вы указать мне код, который это делает? Я не могу найти его –