关于event(事件)

abc3000 2006-05-23 09:09:53
TCPServer是我自己写的一个类,
并且如下声明了一个事件
public delegate void TCPServerDataArr(string sRemortIP, string sData);
public event TCPServerDataArr OnTCPServerDataArr;


现在如下调用:
abcd = new TCPServer(8080);
abcd.OnTCPServerDataArr += new TCPServer.TCPServerDataArr(OnMyEvent);
public void OnMyEvent(string sRemortIP, string sData)
{
MessageBox.Show("Event Fired");
this.textBox1.Text += sData; //这句出错
}
报错如下
Cross-thread operation not valid: Control 'textBox1' accessed from a thread other than the thread it was created on.

请问高手该怎么解决.谢谢了
...全文
326 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
okkk 2006-05-23
  • 打赏
  • 举报
回复
涉及到socket的异步操作。需要深入一层看看异步操作的内容。

这里的问题,估计需要保存数据到数组之类的容器中。然后使用另一个线程从这个数组取数据。
(有互斥问题)
stanly20000 2006-05-23
  • 打赏
  • 举报
回复
同意hdt(倦怠) ,OnTCPServerDataArr在哪里触发的?估计是在textBox1的某个事件中吧。
真相重于对错 2006-05-23
  • 打赏
  • 举报
回复
估计TCPSERVER 类触发事件代码有问题
huing 2006-05-23
  • 打赏
  • 举报
回复
上面的都说了,那就接个分哈
liujiwe79 2006-05-23
  • 打赏
  • 举报
回复
要同时把相应的窗体对象传进来,然后用窗体对象去Invoke方法。
Knight94 2006-05-23
  • 打赏
  • 举报
回复
to 用delegate死的更难看

不是delegate的问题,而是你不能在线程中直接去触发,即你在传进delegate方法后,要同时把相应的窗体对象传进来,然后用窗体对象去Invoke这个方法。
abc3000 2006-05-23
  • 打赏
  • 举报
回复
用delegate死的更难看
feiyun0112 2006-05-23
  • 打赏
  • 举报
回复
不能访问不是同一线程创建的控件

用delegate
abc3000 2006-05-23
  • 打赏
  • 举报
回复
哎 C#好麻烦啊 这就是MS鼓吹的安全嘛 呵呵
Knight94 2006-05-23
  • 打赏
  • 举报
回复
参看
http://blog.csdn.net/knight94/archive/2006/03/16/626584.aspx
我不懂电脑 2006-05-23
  • 打赏
  • 举报
回复
对textBox1要进行互斥操作。
abc3000 2006-05-23
  • 打赏
  • 举报
回复
哈 我是Visual Studio 2005

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧