作者DearKurt (呕瘦吸)
看板C_Sharp
标题Re: [问题] Socket的accept
时间Mon Dec 11 11:36:39 2006
※ 引述《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)
1F:→ Arton0306:谢谢:) 12/12 03:08