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了
都要用
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了
Chamelephon Apk
回覆刪除