C# 基于消息机制,相似Android Hander,后台和窗体消息交互

---恢复内容开始---java

最近要写个WinFrom客户端应用程序,无奈VC早已经忘记得差很少了。只能靠相似java的C#来写,后来写到后台与窗体交互的时候有了问题,原本想到用回调函数和托管的。ide

后来想到Android里面有Handler机制,WinFrom应该也有。上网查了点资料,也解决了这个问题,这个可用于窗体与窗体发送消息进行通讯,主要是与界面进行交互。函数

首先,窗体要接收别出来的消息,必须重写DefWndProc方法,以下:spa

protected override void DefWndProc(ref System.Windows.Forms.Message m)
{
    switch(m.Msg)
    {
        //MESSAGEXXX是在后面MESSAGE类定义的常量
        case Message.MESSAGEXXX:
        {
           //TODO  这里处理消息
           break;
        }
        case Message.MESSAGEOOO:
        {
           //TODO  这里处理消息
           break;
        }
        default:
          base.DefWndProc(ref m);
          break;
     }
}

  而后实现一个消息发送的累Message,这里须要用的Win32里面的动态连接库user32.dll。code

class Message
{
        [DllImport("user32.dll", EntryPoint = "PostMessage")]
        //PostMessage也能够换成SendMessage,主要是user32.dll里面的函数
        private static extern int PostMessage(
        int hwnd, // 窗体句柄
        int msg, // 须要发送的消息,为整形
        int wparam, //
        int lparam // 后连个变量可做为传递参数之用
        );
        [DllImport("user32.dll", EntryPoint = "FindWindow")]
        private static extern int FindWindow(string lpclassname, string lpwindowname);//搜索发送消息的目标窗体
        //定义消息常数 用来标志处理哪类消息的参数
        public const int MESSAGEXXX= 1;
        public const int MESSAGECCC= 0;
        /// <summary>
        /// 向窗体发送消息的函数
        /// </summary>
        /// <param name="msg"></param>
        public void SendMessage(int msg)
        {
            int window_handler = FindWindow(null, "ImporterManagerForm");//这里后面字符串表明的是要搜索的窗体,得到窗体句柄
            if (window_handler == 0)//不存在当前窗体
            {
            }
            else
                PostMessage(window_handler, msg, 100, 200); //发送消息
        }
}

而后再别的窗体就能够发送消息过去了orm

Message msg=new Message();
msg.SendMessage(Message.MESSAGEXXX);

 

 

---恢复内容结束---blog

相关文章
相关标签/搜索