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

时间:2010-07-22 17:44:27

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

情景:

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

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

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

UPDATE1:

感谢所有人 - 肯定有很多有效的答案。

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

5 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

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

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

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

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

答案 4 :(得分:1)

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

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

请参阅有关该主题的一些介绍文章:

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