【问题标题】:Refreshing Windows program when other users make changes?其他用户进行更改时刷新 Windows 程序?
【发布时间】:2011-03-19 17:04:47
【问题描述】:

场景:

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

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

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

更新1:

谢谢大家 - 肯定有很多有效的答案。

我选择了Icemanind 推荐的场景的更简单版本。

【问题讨论】:

  • 了解您希望用户何时接收更新/刷新是否重要。您需要立即更新还是延迟更新?用户会处理相同部分的数据吗?例如,如果您有数千个对象并且您正在处理实体 1,那么重要的是您立即知道实体 959 刚刚更改还是仅在您尝试自己修改 959 时才知道?根据这些要求,您可以像我的回答那样使用被动模式,或者像其他人推荐的那样使用更主动的“推送”系统。
  • 什么数据库以及如何从该数据库中读取数据??
  • @marc_s -> 数据库现在是 MySQL。
  • @Matthew - 用户将处理相同部分的数据(最新的待办事项)。刷新不需要是即时的 -> 我确实有处理内置以防止人们开始相同的任务。

标签: c# mysql winforms .net-3.5 refresh


【解决方案1】:

正如卢卡斯建议的那样,您可以实现一个“推送”风格的系统,每当修改实体时,它都会“推送”给其他连接的用户。这可能有点复杂。我们处理遗留系统的方式是通过“更改编号”列,但实际上它可以是每次修改记录时更新的任何内容。

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

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

如果他们未能获得行锁并且“更改编号”相同,我们会显示一条消息,表明他们请求的实体正在被其他用户使用。如果“更改编号”不同,则消息指出他们必须刷新视图。

【讨论】:

    【解决方案2】:

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

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

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

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

    当然,这是一个指南。您需要根据需要对其进行修改。

    希望这是有道理的,祝你好运!

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我会在项目上选择 isDirty 时间戳/标志。无需再次获取所有项目,无需创建困难的推送系统。不时重读自上次通话以来的项目。

        【讨论】:

          【解决方案5】:

          如果您使用 SQL Server 作为您的存储,并使用 ADO.NET 或其他东西来访问您的数据,您还应该检查 SQL 依赖关系。

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

          查看一些关于该主题的介绍文章:

          这需要一些初始设置工作,但这里的巨大优势是:当您感兴趣的内容(这是您的查询结果集的一部分)发生更改时,您会自动收到通知,你可以对此做出反应。没有凌乱的投票或任何东西......

          【讨论】:

            猜你喜欢
            • 2011-12-27
            • 1970-01-01
            • 1970-01-01
            • 2015-02-23
            • 2021-06-13
            • 1970-01-01
            • 2010-09-08
            • 2018-09-20
            • 2018-03-01
            相关资源
            最近更新 更多