首页 新闻 会员 周边 捐助

C# winform怎样实现即时读取消息

1
悬赏园豆:10 [已解决问题] 解决于 2011-11-29 11:23

最近在做一个ERP系统,里面有一个收发消息的模块,我想知道怎样实现像腾讯一样即时收发信息的功能.我把信息存到了一个表里面,当来新的消息时会弹窗提示.但我不知道怎样才能实现对方有没有发送消息过来,搜了下网上,有的人说用timer控件,但这个控件没用过,请教各位大虾了.我想问一下,这个timer控件的功能是不是就是说要时时从数据库里读取新的消息.会不会耗资源.求思路和关键Code,在些谢过高手们了.

路过春秋的主页 路过春秋 | 初学一级 | 园豆:10
提问于:2011-11-29 09:55
< >
分享
最佳答案
2

原理就是隔一段时间去服务器端取数据,如果有新消息就弹窗提示,常用的方案有两种:

1是用timer控件,用法参考:http://www.cnblogs.com/zhixingheyi/archive/2008/08/20/1272276.html

2是用多线程来做,用法参考(这篇文章中用的是后台线程):http://www.cnblogs.com/artwl/archive/2011/11/15/2249113.html

收获园豆:10
artwl | 专家六级 |园豆:16736 | 2011-11-29 10:07

你好,我刚才按照第一种方法做了一下,提示错误,说不是创建form_main的线程访问它.

路过春秋 | 园豆:10 (初学一级) | 2011-11-29 10:34

@路过春秋: 这个就要靠你自己多调试了。

不过推荐用第二种,第二种用的后台线程虽然写起来有点麻烦,但很灵活,更好用

artwl | 园豆:16736 (专家六级) | 2011-11-29 10:38

@artwl: 刚才我用了timer,但是它一直在里面循环,我从数据库读取了数据之后,判断是否有未读消息,但是我想弹出一个窗口时,却不执行了.一直在里面死循环了.

路过春秋 | 园豆:10 (初学一级) | 2011-11-29 10:50

@路过春秋: 模式窗口会阻塞父窗口的进程的,这个要特殊处理才行

artwl | 园豆:16736 (专家六级) | 2011-11-29 10:53

@artwl: 大虾,请问怎样处理计时器的暂停啊,我取到信息之后弹出一个窗口,但是计时器一直运行,弹出好多个窗口,停也停不掉.我只有关掉了,然后我用timer.sotp()停止,但是停止过后计时器就不工作了,这样它就不会再去数据库读取数据了

路过春秋 | 园豆:10 (初学一级) | 2011-11-29 11:12

@路过春秋: 这个与逻辑相关,要靠你自己处理了,反正timer控件有stop和start方法来暂停和开始。你可以只弹出一个窗口,有新消息后只是改变弹出的窗口内的内容,如提示有多少条新消息等。用户读了消息后再调用start方法重新开始运行timer控件

artwl | 园豆:16736 (专家六级) | 2011-11-29 11:19

@artwl: 哦,谢谢了.我自己再想想.园豆给你了,非常感谢你的回答.

路过春秋 | 园豆:10 (初学一级) | 2011-11-29 11:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册