永发信息网

C#问题,异常:线程间操作无效: 从不是创建控件“textbox2”的线程访问它。

答案:3  悬赏:30  手机版
解决时间 2021-07-29 10:19
  • 提问者网友:世勋超人
  • 2021-07-29 02:47

请问要怎么解决啊?

我的源代码:

private void button1_Click(object sender, EventArgs e)
{
try
{
tcpListener = new TcpListener(1234);//设置监听端口
tcpListener.Start();//启动监听
MessageBox.Show("服务器已启动!");
socketForClient = tcpListener.AcceptSocket();//挂起连接
networkStream = new NetworkStream(socketForClient);//存入网络流
streamWriter = new StreamWriter(networkStream);
streamReader = new StreamReader(networkStream);

int flag = 0;
if (socketForClient.Connected)
{
if (flag == 0)
{
flag = 1;
MessageBox.Show("客户端已连接!");
}
buffer = new byte[1024];
networkStream.BeginRead(buffer, 0, 1024, new AsyncCallback(Read), null);//异步读取网络流
}

}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}

private void Read(IAsyncResult ar)
{
message = Encoding.UTF8.GetString(buffer);//接受信息
buffer = new byte[1024];
networkStream.BeginRead(buffer, 0, 1024, new AsyncCallback(Read), null);
this.textBox2.Text = message;//这一句抛异常了…当我一定要赋值啊??

}

最佳答案
  • 五星知识达人网友:动情书生
  • 2021-07-29 04:14
textbox2.Invoke( Test ) 你去看看这个方法。。也就是委托。。从不是创建控件“textbox2”的线程访问它。。意思上是。。textbox2 是主窗体的线程创建这个对象的。。而你用你自己创建的线程去对textbox2对象进行操作。。C#控制了线程安全。。所以不行的。。Invoke( Test ) 。。Test 是一个方法。。你自己定义下。。里面去对 textbox2 的对象进行操作就可以了。。
全部回答
  • 1楼网友:妄饮晩冬酒
  • 2021-07-29 06:57

这个不能直接用的,得用异常方法,

对像.BeginInvoke(委拖,参数列表);

说细你加我qq:254186917

我给你搞定吧

  • 2楼网友:患得患失的劫
  • 2021-07-29 05:51
必须用委托
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯