WebSocketSharp 訊息& 執行緒中 控制視窗元件的重要方法

在c# windows 中如果用到執行緒 要跳出丟給 form 中的函示或是物件
都要用
 this.Invoke((MethodInvoker)delegate//要控制視窗
            {
             控制內容
            });
包起來
今天 看 WebSocketSharp 中就碰到 訊息丟不出來
其實很簡單
先宣告外部  WebSocket client;
然後建立 (事件我是用另一種方式建)
 using (client = new WebSocket(host))
            {
                client.OnOpen += MyOpen;// (ss, ee) =>listBox1.Items.Add(string.Format("Connected to {0} successfully", host));
                client.OnError += MyErr;//  (ss, ee) => listBox1.Items.Add("Error:" + ee.Message);
                client.OnMessage += MyMess;
                client.OnClose += MyClose;// (ss, ee) => listBox1.Items.Add(string.Format("Disconnected with {0}", host));
            }
建立方式 在Key完 MyOpen; 一開始有錯誤.滑鼠移過去..點選"解決方案"建立方法 就會自動幫你建好
 private void MyOpen(object sender, EventArgs e)
        {
            listBox1.Items.Add(string.Format("Connected to {0} successfully", host));
        }
依此類推
但是 MyMess 一開始是看不到訊息出現
但是用斷點追蹤看是有東西的
推論是因 他需要保持 連線狀態 所以 是以Thread 方式寫的
以至於 OnMessage 雖有資料但是無法丟到 form上處理
於是就要用 this.Invoke((MethodInvoker)delegate 包起來

 private void MyMess(object sender, MessageEventArgs e)
        {
            string ss = e.Data;
            MessageBox.Show(ss);
            this.Invoke((MethodInvoker)delegate//要控制視窗
            {
                textBox2.AppendText("**************\n");
                textBox2.AppendText(ss + "\n");
                textBox2.AppendText("*********\n");
                textBox2.Refresh();
                showmess(ss);
            });
            // throw new NotImplementedException();
        }
這樣就OK了







留言

張貼留言

熱門文章