代码之家  ›  专栏  ›  技术社区  ›  John M

其他用户更改时刷新Windows程序?

  •  4
  • John M  · 技术社区  · 14 年前

    脚本:

    • 4个用户启动连接到基于数据库的待办事项列表的同一客户端程序(Winforms)的单独实例。

    如何更新/刷新其他3个用户屏幕以反映第3项不再可用?

    我的想法是一个包含上次更新日期时间戳的表。然后计时器每隔几秒钟检查一次,看是否有任何变化。

    更新1:

    感谢所有人-肯定有一些有效的答案。

    我选择了更简单的方案 Icemanind 推荐。

    5 回复  |  直到 7 年前
        1
  •  1
  •   Icemanind    14 年前

    对。最好的方法是实现“推”式系统。下面是它的工作原理。每当有人在客户端单击某个东西时,客户端就会向服务器发送一条消息。服务器将需要接收此信号,然后服务器将向连接到服务器的所有客户端发送刷新消息。

    我不知道您的客户机或服务器是编码的,但是您需要在服务器上创建一个线程,用于“侦听”来自客户机的传入消息,一旦它接收到消息,将其放入队列,就返回到侦听更多消息。服务器上的第二个线程需要处理队列中的消息。

    在客户端,您还需要另一个线程来侦听来自服务器的传入消息。一旦收到消息,它就可以处理消息并采取任何必要的措施。

    关于客户机/服务器和套接字编程的相当不错的教程可以在这里找到: http://www.codeproject.com/KB/IP/serversocket.aspx

    当然,这是一个指南。你将需要修改它,因为你认为合适。

    希望这有意义,祝你好运!

        2
  •  2
  •   Matthew    14 年前

    当一个用户试图修改一个实体时,我们查询数据库以行锁定该实体,其中“变更号”反映了用户当前拥有的“变更号”。

    如果锁定成功,用户可以更新/删除实体。完成后,实体上的“保存/提交”和“更改编号”会增加。

        3
  •  1
  •   µBio    14 年前

    您可以实现一个“推送”系统,当一个用户更新某个内容时,服务器会向所有连接的客户端发送一条更新消息。

        4
  •  1
  •   riffnl    14 年前

    我会在项目上选择isDirty时间戳/标志。无需再次获取所有项目,也无需创建困难的推送系统。每隔一段时间重新阅读上次通话后的内容。

        5
  •  1
  •   marc_s    14 年前

    基本上,您可以从表中创建查询,并且可以指示SQLServer在查询结果中的任何数据发生更改时通知您。

    请参阅有关此主题的介绍文章:

    它需要一点初始设置工作,但这里的巨大优势是:当您感兴趣的东西(这是系统的一部分)出现时,系统会自动通知您 查询结果集)更改,您可以对此做出反应。没有乱七八糟的投票。。。。