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

场景:

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

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

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

UPDATE1:

感谢所有人 – 肯定有许多有效的答案。

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

是。 执行此操作的最佳方法是实现“推送”类型系统。 以下是它的工作原理。 只要有人点击客户端上的内容,客户端就会向服务器发送消息。 服务器需要接收此信号,然后服务器将向连接到服务器的所有客户端发送刷新消息。

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

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

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

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

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

正如Lucas建议您可以实现一个“推送”式系统,无论何时修改实体,它都会“推送”给其他连接的用户。 这可能有点复杂。 使用遗留系统我们处理此问题的方式是通过“更改号码”列,但实际上它可以是每次修改记录时更新的任何内容。

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

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

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

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

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

如果您使用SQL Server作为商店,并使用ADO.NET或其他东西进行数据访问,则还应检查SQL依赖关系。

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

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

  • 使用SqlDepedency进行数据更改事件
  • SqlDepedency:创建更智能的缓存
  • 使用SqlDependency监视SQL数据库更改
  • 在ADO.NET 2.0中查询通知

它需要一些初始设置工作,但这里的巨大优势是:当您感兴趣的内容(这是查询结果集的一部分)发生变化时,您将自动得到通知,并且您可以对此作出反应。 没有凌乱的民意调查……