我正在使用WorkflowMarkupSerializer来保存状态机工作流程 - 它保存状态OK,但不保留其位置。编写工作流程的代码在这里:
using (XmlWriter xmlWriter = XmlWriter.Create(fileName))
{
WorkflowMarkupSerializer markupSerializer
= new WorkflowMarkupSerializer();
markupSerializer.Serialize(xmlWriter, workflow);
}
阅读工作流程的代码是:
DesignerSerializationManager dsm
= new DesignerSerializationManager();
using (dsm.CreateSession())
{
using (XmlReader xmlReader
= XmlReader.Create(fileName))
{
//deserialize the workflow from the XmlReader
WorkflowMarkupSerializer markupSerializer
= new WorkflowMarkupSerializer();
workflow = markupSerializer.Deserialize(
dsm, xmlReader) as Activity;
if (dsm.Errors.Count > 0)
{
WorkflowMarkupSerializationException error
= dsm.Errors[0]
as WorkflowMarkupSerializationException;
throw error;
}
}
}
答案 0 :(得分:1)
打开控制面板 - > “区域和语言选项”并将列表分隔符设置为“,”(逗号) 和workflow serializer将使用','(逗号)作为struct SizeF的X,Y坐标的分隔符
然后选择';'和工作流程序列化程序将使用';' (分号)作为分隔符。
这非常愚蠢,序列化程序使用区域设置进行序列化标记。
答案 1 :(得分:0)
哈,即使是Visual Studio 2008中托管的工作流设计人员也会随机丢失状态。这告诉我这可能不是一件容易的事,而且是构成它的活动外部的信息。我会在主持人周围挖掘更多信息;如果我找到了什么,我会回复。
答案 2 :(得分:0)
所有州的位置都保存在一个单独的文件中。您需要使用工作流本身的标记来拖动它。幸运的是,它也只是XML,因此您可以重用大部分代码。如果内存服务,我相信它只是NameOfYourWorkflow.layout。
我同意x0n - 设计师在Visual Studio中非常糟糕。
答案 3 :(得分:0)
好的,this tutorial提供了有关如何操作的良好信息 - 尽管到目前为止我只能保存布局,但我无法正确使用布局。有问题的信息大约是2 / 3rds(或者只是搜索.layout)
(如何关闭他自己的问题?)
答案 4 :(得分:0)
请注意,创建的XML的序列化或反序列化存在错误(在示例中以.layout扩展名命名。)
它生成以下xml作为文件的第一行:
<?xml version="1.0" encoding="utf-8"?><StateMachineWorkflowDesigner xmlns:ns0="clr-namespace:System.Drawing;Assembly=System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Name="New" Location="30, 30" Size="519, 587" AutoSizeMargin="16, 24" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">
重新阅读时, size 属性会导致异常。我从文件中删除了Size =“519,587”,工作流程正确加载回来。现在,我写文件,打开它并删除大小,然后关闭它。我需要考虑更优雅的解决方案,但至少我现在正在保存和恢复状态机工作流程。