我正在构建一个提供应用程序自动化服务的Windows Forms系统(在C#中,如果它对任何人都很重要)。由于此应用程序针对的是精通计算机的用户,因此我决定使用向导UI简化用户的操作。我想避免将视图和视图引擎(将从中构建向导)耦合到自动化引擎。
我遇到的问题是,自动化引擎在单独的线程上运行时需要向用户报告状态信息,以及监听用户的取消或暂停事件。由于我不希望视图引擎或自动化引擎相互依赖,因此我很难确定如何提供此信息管道。
我对此问题的任何见解都将不胜感激。在这一点上,我已经被困了几个星期了,我真的不想放弃,只是将所有东西放在一起。
如果有人需要其他详细信息来帮助我们提出某些想法,请告诉我们,我们很乐意为您提供。
答案 0 :(得分:1)
为什么不在中间有一个线程安全对象作为两者之间的通信平台?此类将具有自己的事件以及提供输入和提取所需信息的方法的属性和方法。您甚至可以更进一步,如果您有多个向导同时运行的向导和自动化平台,如果它们是唯一可识别的,我会设置向导ID到平台ID的哈希,并且您的对象可以处理多个对的通信时间。这需要非常小心,一切都是线程安全的,并且您正在执行的通信仅使用与该向导 - 平台对相关的信息。
我知道这是一个广泛的答案,但我会先看看这种方法。它为您提供了理想的关注点分离,同时也为您提供了一个可以像您设计的那样通用的交流平台。
最后,提出建议,你可能不需要。您不应该使通信类依赖于可能导致您遇到循环引用问题的任何事情。我会尽可能地使该类成为不可知的,它所需的任何对象应该与向导/平台所需的对象分开,除非这些对象本质上是通用的,因此您可以真正分离关注点。
希望这有帮助。