c#如何多个窗口中传输数据,类似安卓的广播,不要构造函数、静态变量等方法

在用C#写一个桌面程序,一个类在后台不停接收服务端推来的数据,需要更新到多个窗口控件中。窗口中有部分的控件引用了单独的UserControl或用代码创建,不想手动赋值每一个事件。是否有合适的方法可以将数据推给所有的窗口,让窗口自行处理。类似安卓中的广播。

阅读 2.5k
1 个回答

可以使用WIN32API SendMessage 给对应窗口或者控件发窗口消息传递信息:

 //消息发送API
        [DllImport("User32.dll", EntryPoint = "SendMessage")]
        public static extern int SendMessage(
            IntPtr hWnd,        // 信息发往的窗口的句柄
            int Msg,            // 消息ID
            int wParam,         // 参数1
            int lParam          //参数2
        );

所有继承自Control的控件(包括Form)都有一个虚方法WndProc,你可以重写这个方法来接收消息:

 protected override void WndProc(ref Message m)
 {
    switch (m.Msg)
    {
        case (int)MessageOne:       
            break;

        case (int)MessageTwo:      
            break;
        
        default:
            base.WndProc(ref m);
         break;
     }
  }

至于怎么在消息里加入自己的消息数据,方法有很多,可以到bing上搜一下。
小技巧分享:使用PostMessage向窗体传递任何数据 (仅供参考,有效性未验证)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进