Re: [問題] Socket的accept
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):