C# 0MQ windows GUI最佳实践
我有一个很简单的问题。我想使用0MQ实现一些非常基本的发布/订阅功能。我的订户应用程序是基于windows GUI的应用程序,使用普通winforms 由于在0MQ中似乎没有明确的参考来处理这个场景,我假设在最坏的情况下,一旦0MQ线程收到任何订阅消息,我就必须在windows GUI线程上使用BeginInvoke(…)。这似乎很简单,但如果有人对处理这件事的最佳方法有任何见解/意见/头脑,我将非常感激 提前谢谢C# 0MQ windows GUI最佳实践,c#,.net,winforms,zeromq,C#,.net,Winforms,Zeromq,我有一个很简单的问题。我想使用0MQ实现一些非常基本的发布/订阅功能。我的订户应用程序是基于windows GUI的应用程序,使用普通winforms 由于在0MQ中似乎没有明确的参考来处理这个场景,我假设在最坏的情况下,一旦0MQ线程收到任何订阅消息,我就必须在windows GUI线程上使用BeginInvoke(…)。这似乎很简单,但如果有人对处理这件事的最佳方法有任何见解/意见/头脑,我将非常感激 提前谢谢 David对于WinForms应用程序中的ZeroMQ订阅服务器,您至少有几个选
David对于WinForms应用程序中的ZeroMQ订阅服务器,您至少有几个选项:
progressChanged
事件以更新您的UI李>
您选择哪种方法取决于您的设计标准。如前所述,有几种方法可以将ZeroMq连接到WinForms应用程序中。它与在其他设置(如控制台应用程序)中使用ZeroMq和C#没有太大区别。主要区别在于,您指出,为了更新Gui控件,必须将消息放入Gui线程 使用单独的线程+队列(生产者/消费者模式)的示例如下: 另一种方法是(再次)使用一个单独的线程来执行ZeroMq工作,并设置一个事件,该事件在每次收到消息时触发。然后Gui可以连接事件处理程序并处理消息。当然,您还必须调用对Gui的任何更新。这种方法的一个缺点是,事件处理会稍微干扰ZeroMq处理程序线程,特别是当Gui更新需要一段时间,并且如果您收到大量数据时
所有解决方案都有其优缺点,这完全取决于您的特定问题域的外观。总而言之,将ZeroMq集成到C#应用程序中,无论是WinForms还是其他应用程序,在我看来都非常简单。这本书写得很好,使用方便。您可能遇到的问题更多地与ZeroMq本身的有限错误反馈有关。如果你遇到奇怪的碰撞;尝试在控制台应用程序中运行相同的逻辑,这将为您提供更好的错误消息。更多信息将有助于识别您要查找的内容。我不确定您是在引用内置的0mq上下文背景线程,还是您自己的执行0mq内容的线程。通常使用0mq,您创建一个上下文,代码中的每个线程都有自己的套接字(都是从一个上下文构建的,您可以跨线程边界共享它的线程安全的上下文)。然后,您可以阻止套接字的发送/接收,或者设置zmq_poll对象,以便在套接字有可用消息时进行轮询。。。