Re: [問題] Socket的accept

看板C_Sharp作者 (嘔瘦吸)時間17年前 (2006/12/11 11:07), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串4/4 (看更多)
※ 引述《Arton0306 (沒有怎麼辦)》之銘言: : 我想試試看backgroundworker的方法 : 結果居然不行 : receiveMsg我是用另一個thread去跑 : 最後他還是跟我說receiveBox的thread不是產生receiveBox的thread而錯誤 : 其實用上一篇的invoke是可以 但是我想試試看backgroundworker啊~~ : 快瘋了…囧 : 我的mainthread也不會再receiveBox上寫東西呀 : 又不會有啥race condition : 為了讓別的thread在receiveBox上寫字居然這麼麻煩...orz : private void receiveMsg() { : while (true) : { : if (cbSocket.Receive(recmsg) != 0) : backgroundWorker1.RunWorkerAsync(); : } : } : private void backgroundWorker1_RunWorkerCompleted(object sender, : RunWorkerCompletedEventArgs e) : { : this.receiveBox.Text = "dfkdlf"; //這一行發生問題 囧 : } 好像dotnet framework 2.0後 在非UI(MAIN) THREAD修改UI的屬性都要用到INVOKE 另外2.0也有anonymous delegate可以簡化INVOKE程式碼 所以寫起來還不會太複雜 甚至可以乾脆自己加到code snippets 像上面可以改成這樣 private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { this.Invoke(new System.Threading.ThreadStart(delegate() { this.receiveBox.Text = "dfkdlf"; } )); } ThreadStart是dotnet已經宣告好的Delegate 因為懶得另外再宣告 若所delegate的method不需傳遞參數 可以用ThreadStart -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.74.223.16 ※ 編輯: DearKurt 來自: 211.74.223.16 (12/11 11:38)

12/12 03:08, , 1F
謝謝:)
12/12 03:08, 1F
文章代碼(AID): #15VCjMfm (C_Sharp)
文章代碼(AID): #15VCjMfm (C_Sharp)