我开始认为我应该放弃 Windows WF,转而使用更简单的东西。我不一定需要长时间暂停工作流程执行并稍后恢复它们。然而,我想要一个简单的状态机框架,它具有基本的挂起/恢复/中止(没有序列化)。
我已经下载了来自 Google Code 的无状态框架 http://code.google.com/p/stateless/我将开始使用它,但很想听听其他 .NET 程序员正在使用什么。
EDIT无状态似乎很容易实现,但我确实想知道这是否适合糖果机。在自动化领域,我总是对应该如何使用状态机感到矛盾。尽管我使用“状态机”这个术语,但我的使用比较宽松,因为我使用它更像是流程图。我没有使用状态来表示机器当前所处的模式,而是使用它来执行函数。因此,在这种无状态的情况下,我实际上会使用从一种状态到下一种状态的转换作为调用糖果机控制器中的函数的机制。想法?
当我完成这个工作时,我会尝试列出一些我发现的东西。从分析的角度来看,大多数可能有点肤浅(特别是因为我对这两个框架都是新手),但希望它能帮助别人。
无国籍
Pros
- 开源
- 语法简洁且易于阅读
- 谷歌代码的 Mercurial 存储库中有很好的例子
- 我可以非常快速地将我的 UML 状态图转换为使用无状态的代码。
- 状态维护非常简单——我可以轻松添加和删除。扩展方法允许我在单独的行上配置状态,这样我就可以注释掉我不想使用的触发器或操作。
- 将数据传递到状态机或从状态机传递数据很容易,您可以在代码隐藏中按照自己的意愿进行操作。
- 同样,状态机可以通过多种方式更新GUI。现在,我正在通过界面修改数据,然后 GUI 使用计时器来更新其元素。我也可以使用BackgroundWorker 来做到这一点。
- 我刚刚开始使用子状态来处理我的 GUI,它需要管理各种状态,如运行、暂停、中止和空闲。暂停状态具有子状态,因为用户可以通过多种方式暂停系统,但恢复触发器特定于它们暂停的方式。我喜欢能够通过使用轻量级状态机框架来管理 GUI 的启用/禁用和工具提示。
Cons
- 没有内置的暂停、恢复、中止机制
- 只有一名开发商支持该项目。不过,我最近遇到的一个问题确实得到了帮助。
- 如果不小心,可能会被误用。我第一次尝试时错误地实现了状态机框架。它运行了几个月,效果很好,但最终当我运行一个非常长时间运行的进程时,它就死掉了。事实证明,我导致状态处理程序堆积,并且出现了堆栈溢出情况。
Windows 工作流基础
Pros
- 设计工作流程的图形方法
- 支持持久化、暂停、恢复、中止工作流程
- MS 可能有一个庞大的程序员团队来支持这一点
- GUI 使禁用/重新启用活动变得非常容易
Cons
- 设计工作流程的图形方法掩盖了这个事情非常复杂的事实
- 为了使用持久性并获得暂停/恢复/中止,您必须安装并设置“持久性服务”,我还没有弄清楚如何开始工作。我可以很好地设置 SQL 数据库,但在运行时我收到一堆我不明白的错误。
- 因为它来自 MS,所以你不知道它是否会存在很长时间或完全被丢弃。
- 错误处理有点奇怪,因为您可以使用代码隐藏或FaultHandler
- 将数据从 WF 传递到主应用程序很复杂,需要诸如 WCF(另一种我现在没有足够时间充分学习的技术)之类的技术,或者使用ExternalDataExchange 接口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)