C# Socket 多线程问题!
启动一个线程:
CheckForIllegalCrossThreadCalls = false;
Thread th = new Thread(new ThreadStart(ReciveMessage));
th.Start();
public void ReciveMessage()
{
while (true)
{
if (client != null)
{
byte[] recvBytes = new byte[120];
bytes = client.Receive(recvBytes, recvBytes.Length, 0);
byte[] bytefour = new byte[4];
bytefour[3] = recvBytes[0];
bytefour[2] = recvBytes[1];
bytefour[1] = recvBytes[2];
bytefour[0] = recvBytes[3];
float s = BitConverter.ToSingle(bytefour, 0);
textBox1.Text += s.ToString();
textBox1.Text += " ";
}
else
{
label1.Text = "123";
}
}
}
执行这段代码,能正常接收到信息,但是如果我把 label1.Text = "123"; 去掉就会报:套接字没有连接并且(当使用一个sendto调用发送数据报套接字时)没有提供地址 的错误,求解释!!!!!!
[解决办法]
好诡异的问题。可以肯定else里面的跟socket没关系,应该是在线程外初始化client的时候需要跟线程建立互斥,比如用互斥对象,lock,或者volatile变量都行,初始化完毕后开放接收处理,而不是简单的用null做判断,
[解决办法]
你是不是什么地方引用的 label1.Text 这里面的内容导致的错误
[解决办法]
这段代码没问题
是不是哪里调用sendto的地方套接字连接出错了
[解决办法]
另外就是多线程内使用另外主线程控件的问题了
看你这里的代码,这个你没报错应该没问题