日期:2014-05-18 浏览次数:21129 次
        protected override void DefWndProc(ref System.Windows.Forms.Message m)
        {
            switch (m.Msg)
            {
                case WM_COPYDATA:
                    //your process
                    break;
                default:
                    base.DefWndProc(ref m);
                    break;
            }
        }
------解决方案--------------------
问题一:开辟内存空间何解?你不是已经有了一个服务进程么?这个服务进程对访问它的其他客户端进程而言,不就是一段可以共享的内存空间么?
问题二:进程间通讯我比较习惯用的是windows Message。至于数据最新,这个你自己设计相关逻辑去更新你服务进程中的数据。
给你一个winMsg例子做参考
Server发送数据
private static void YourSendMessage(string strSendingData)
        {
            //调用发送消息方法
            sendMessage(strSendingData);
        }
        const int WM_COPYDATA = 0x004A;
        //发送消息
        [DllImport("User32.dll", EntryPoint = "SendMessage")]
        private static extern int SendMessage(
            int hWnd,
            int Msg,
            int wParam,
            ref COPYDATASTRUCT lParam
        );
        //通过窗口标题找到窗口
        [DllImport("User32.dll", EntryPoint = "FindWindow")]
        private static extern int FindWindow(string lpClassName, string lpWindowName);
        public static void sendMessage(string strSendingMsg)
        {
            string winName = "";    //你想要发送的窗口标题
            int window_handler = FindWindow(null, @winName);
            if (window_handler != 0)
            {
                byte[] byt = System.Text.Encoding.Default.GetBytes(strSendingMsg);
                int len = byt.Length;
                COPYDATASTRUCT cds;
                cds.dwData = (IntPtr)100;
                cds.lpdata = strSendingMsg;
                cds.cbData = len + 1;
                SendMessage(window_handler, WM_COPYDATA, 0, ref cds);
            }
        }
        public struct COPYDATASTRUCT
        {
            public IntPtr dwData;
            public int cbData;
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpdata;
        }
------解决方案--------------------
下面例子可以直接运行(需要VS2010,因为MemoryMappedFile是.net4才有)。
编译通过后,先运行