2010-02-18 88 views
3

我必须实现客户端为Windows应用程序的基于客户端服务器的应用程序。现在,我的计划是创建一个Web服务作为服务器应用程序,并在我们的客户端应用程序中使用它。但问题在于通知。为此,我需要在客户端应用程序中添加一个计时器来检查通知。它减慢了客户端应用程序的速度。如何使用.NET实现Windows应用程序的通知

这样做的最佳方法是什么?

我需要为这两个应用程序创建设置。所以,解决方案必须是可部署的。

编辑:我不能把计时器放在后台或单独的线程,因为我必须立即更新datagridview。

+0

您能否显示此计时器的代码,以便我们可以看看是否有可能导致此减速的错误? – 2010-02-18 07:26:32

+0

您需要多长时间轮询您的服务器以进行更改?如果每分钟不超过几次,您目前的方法应该可以正常工作。仔细阐述“它会减慢客户端应用程序”声明? – 2010-02-18 07:28:18

+0

BackgroundWorker可以像UI线程一样快地更新UI。 – 2010-02-23 22:44:46

回答

0

如果您使用WCF,那么你可能需要考虑Duplex services

双工服务合同,是指两个端点 可以独立发送消息到 其他消息 交换模式。因此,双工服务 可以将消息发送回到客户端端点,从而提供类似于事件的行为 。当客户端 连接到服务并向 服务提供服务时,通信发生双工 通信,服务可以通过该服务将消息发送回 客户端。请注意,类似事件的 双工服务的行为仅在会话中使用 。

所以这避免了计时问题..

一些链接值得考虑

0

通过“创建一个web服务作为服务器应用程序,并在我们的客户端应用程序使用它”我想你的意思是你通过一个代理访问Web服务,并在您的客户端应用程序没有实际承载Web服务。

你在后台线程上运行你的计时器吗?我得到的印象是,你使用计时器来轮询Web服务,并且它正在捆绑你的UI,导致放慢速度(当然,还有其他因素需要考虑,但这是我当时最可能考虑的因素)。

+0

已更新的问题。 – Brij 2010-02-18 12:58:42

0

你如何做“检查通知”?这可能是一个愚蠢的建议,但开始一个新的线程来做到这一点可能会减轻对客户端应用程序的冲击?

1

使用一个BackgroundWorker或Threadpool.QueueUserWorkItem您的来电到web服务,然后更新你的GUI。您的应用程序变慢,因为您呼叫从主UI线程的web服务,直到该Web服务调用完成后您的应用程序无法处理其他事件,包括重画,缩放,点击...

见本文件:http://msdn.microsoft.com/en-us/library/ms951089.aspx

你想通过调用远程资源立即更新? 恐怕这是不可能的,除非我们倾倒热力学法则之一,并允许时间旅行。

但是你可以作弊并且预取你的数据并且每隔XXX秒将它绑定在幕后。

在更新网格时请记住使用BeginUpdateEndUpdate,以免发生闪烁。

0

即使您需要使用结果更新UI,对另一个线程执行检查的建议也是正确的。只要确保在表单上使用InvokeRequired属性和BeginInvoke方法。 BeginInvoke会将调用分派给UI线程。请参阅What's up with BeginInvoke?以获取有关示例代码的更完整解释。另外,正如Florian Doyon所说,不要忘记在DataGridView上使用BeginUpdate和EndUpdate。

相关问题