C#如何实现winForm应用程序线程间的消息队列通信

路过的菜鸟 2015-03-26 12:19:35
我想在winform应用程序(MDI)中实现窗口A与窗口B的消息通信,我想用消息队列的方法,请大家指教一下,谢谢。
...全文
805 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mingcsharp 2015-03-26
  • 打赏
  • 举报
回复
其实通信的方法很多,主要看你实际业务用那个好, api. event 公共变量,都可以 w你说的消息队列也可以,不过我觉得这样的话你搞个文件保存应该也行,你自己看吧
tiannailu 2015-03-26
  • 打赏
  • 举报
回复
        private const int WM_MOUSEMOVE = 0x200;
        protected override void WndProc(ref Message m)
        {
            if (WM_MOUSEMOVE == m.Msg)
            {
                lblMouseMove.Text = m.LParam.ToString() + m.WParam.ToString();
            }
            base.WndProc(ref m);
        }
至于每个消息怎么解析我记不清了,你可以去查对应的资料。 发送消息的话,只要你懂windows消息循环机制,应该也不是什么问题。
mingcsharp 2015-03-26
  • 打赏
  • 举报
回复
定义一个Event用也可以嘛,
路过的菜鸟 2015-03-26
  • 打赏
  • 举报
回复
引用 1 楼 tiannailu 的回复:
是使用SendMessage,PostMessage么? [DllImport("User32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage(IntPtr hWnd, int msg, uint wParam, uint lParam); 从control派生出的类都有一个WinProc可以重载处理windows的消息的。
派生的winproc怎么截取其它窗体发过来的消息?能给个demo吗?
tiannailu 2015-03-26
  • 打赏
  • 举报
回复
是使用SendMessage,PostMessage么? [DllImport("User32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage(IntPtr hWnd, int msg, uint wParam, uint lParam); 从control派生出的类都有一个WinProc可以重载处理windows的消息的。
於黾 2015-03-26
  • 打赏
  • 举报
回复
通信分很多种 进程间通信,你需要使用windows消息,windows消息是利用windows系统的消息泵 计算机之间通信,你需要使用以太网协议,比如TCP,UDP,HTTP 自己程序跟自己通信,直接全局变量,或函数传值方式就可以搞定的 这就好比同桌间说悄悄话,直接说话就行,或者传纸条 如果是要全班级通信,可以传纸条,也可以写黑板报 跟外班同学甚至外校同学通信,你才要考虑使用发短信,QQ留言的方式,不要杀鸡用牛刀
於黾 2015-03-26
  • 打赏
  • 举报
回复
不要乱用消息队列 你程序自己的窗体A和B之间要通信,应该使用委托 这就好比你跟你同桌说悄悄话,就不要发短信了
路过的菜鸟 2015-03-26
  • 打赏
  • 举报
回复
有人能说说吗?
路过的菜鸟 2015-03-26
  • 打赏
  • 举报
回复
其实我想知道的是使用sendmessage发出去的消息,如何使用winProc获取该消息,A、B窗体通信只是我想说明问题的例子。
xian_wwq 2015-03-26
  • 打赏
  • 举报
回复
窗体之间通讯, 比较简单的方式是用事件 这个和线程没有必然联系吧
huhuapop 2015-03-26
  • 打赏
  • 举报
回复
主要是看你的应用,线程间通讯的方法 5楼说的很明白了
zj_zwl 2015-03-26
  • 打赏
  • 举报
回复
不了解你的具体要求,线程间通讯又不难
路过的菜鸟 2015-03-26
  • 打赏
  • 举报
回复
引用 5 楼 wmingcsharp 的回复:
其实通信的方法很多,主要看你实际业务用那个好, api. event 公共变量,都可以 w你说的消息队列也可以,不过我觉得这样的话你搞个文件保存应该也行,你自己看吧
对,你说的这些方法,我都想过,但是都不能完美解决我的问题,所以我才想要消息队列。
路过的菜鸟 2015-03-26
  • 打赏
  • 举报
回复
SendMessage的参数如下: hwnd ----------- Long,要接收消息的那个窗口的句柄 wMsg ----------- Long,消息的标识符 wParam --------- Long,具体取决于消息 lParam --------- Any,具体取决于消息 获取函数如下: protected override void WndProc(ref Message m) { if (m.Msg == ???) { if (((int)m.WParam) == ????) { } } } 那么我想在A窗口发关一个 “Hello B!” 的信息给B窗口,那该怎么写? B窗口又如何去使用winpro去判断发来的哪一条信息是从A发来的? 本人新手,最近搞一个项目,需要这方面的技术,但是找了很久才发现消息队列比较合适,但是找不全资料,所以还请各位帮帮忙。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧