溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于WPF多窗口消息傳遞的簡單實現

發(fā)布時間:2020-08-07 15:20:45 來源:網絡 閱讀:2079 作者:speciallst 欄目:編程語言

  在目前一些桌面端展示系統的應用中,需要多個子系統窗口進行信息交換,對于部署在同一臺電腦上的各個子系統,可以通過集成windows系統的消息傳遞方式進行消息傳遞,但是假如將各個子系統部署在不同的電腦上,這種實現方式就有一定的局限性,要涉及到網絡中的不同電腦進行通信,.net提供了可以建一個小的http服務器,可以綁定計算機的端口進行通信,且提供了異步的實現方式,能實現無阻塞的消息通信。

具體實現:
//啟動一個監(jiān)聽, 并綁定端口,MSDN有詳細參數說明
public bool StartListener(string[] prefixes)
        {
            bool isSuccess = false;
            if (HttpListener.IsSupported)
            {
                HttpListener listener = new HttpListener();
                foreach (string s in prefixes)
                {
                    listener.Prefixes.Add(s);
                }
                listener.Start();
                var result = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
                isSuccess = true;
                //Console.WriteLine("Waiting for request to be processed asyncronously.");
                //result.AsyncWaitHandle.WaitOne();  
                //listener.Close(); 
            }
            return isSuccess;
        }

        public void StopListener()
        {
            if (listener != null)
            {
                if (listener.IsListening)
                {
                    listener.Stop();
                }
                listener.Close();
            }
        }
//異步接收數據,并進行下一次的
        private void ListenerCallback(IAsyncResult result)
        {
            HttpListener listener = (HttpListener)result.AsyncState;
            HttpListenerContext context = listener.EndGetContext(result);
            HttpListenerRequest request = context.Request;
            HttpListenerResponse response = context.Response;
            response.ContentType = "text/plain";
            System.IO.Stream output = response.OutputStream;
            string responseString = "true";
            try
            {
                if (MessageAction != null)
                {
                    System.IO.Stream inputStream = request.InputStream;
                    string resStr = string.Empty;
                    if (inputStream.CanRead)
                    {
                        byte[] bytes = new byte[request.ContentLength74];
                        int numBytesToRead = (int)request.ContentLength74;
                        inputStream.Read(bytes, 0, numBytesToRead);
                        inputStream.Close();
                        resStr = Encoding.UTF8.GetString(bytes);
                    }
                    MessageAction(resStr);
                }
            }
            catch (Exception ex)
            {
                responseString = "false";
            }
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
            response.ContentLength74 = buffer.Length;
            output.Write(buffer, 0, buffer.Length);
            output.Close();
            result = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
        }

將建立好的代碼集成到應用程序里,使用.Net的webclient就可以進行消息的操作。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI