我有一个非常简单的问题/问题。我想使用0MQ来实现一些非常基本的Pub / sub功能。我的订阅者应用程序是使用普通winforms的基于Windows GUI的应用程序。
由于在0MQ中似乎没有明确的引用来处理这种情况,我假设在最糟糕的情况下,一旦0MQ线程收到任何订阅,我将不得不在Windows GUI线程上使用BeginInvoke(...)信息。这看起来非常简单,但如果有人对最佳处理方式有任何见解/意见/提醒,我会非常感激。
提前致谢 大卫
答案 0 :(得分:1)
对于WinForms应用程序中的ZeroMQ订阅者,您至少有几个选项:
progressChanged
事件以更新您的UI。 您选择哪种方法取决于您的设计标准。
答案 1 :(得分:1)
正如所指出的,有几种方法可以将ZeroMq连接到WinForms应用程序中。它与在其他设置中使用ZeroMq和C#没有什么不同,例如在控制台应用程序中。主要区别在于您指出必须将消息放入Gui线程才能更新Gui控件。
可以在此处找到使用单独的线程+队列(生产者/消费者模式)的示例:Examples of zeromq pub/sub with C# winform
另一种方法是使用(再次)单独的线程来执行ZeroMq工作并设置每次收到消息时都会触发的事件。然后,Gui可以挂钩事件处理程序并处理该消息。你当然也必须调用Gui的任何更新。这种方法的一个缺点是事件处理会稍微干扰ZeroMq处理程序线程,特别是如果Gui更新需要一段时间,并且如果您收到大量数据。
所有解决方案都有其优点和缺点,这完全取决于您的特定问题域的外观。总而言之,将ZeroMq集成到C#应用程序中,无论是WinForms还是其他,IMO都非常简单。 clrzmq wrapper编写得很好,易于使用。您可能遇到的问题更多地与ZeroMq本身的有限错误反馈有关。如果你遇到奇怪的崩溃;尝试在控制台应用程序中运行相同的逻辑,这将为您提供更好的错误消息。