首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# Socket 多线程有关问题

2013-10-30 
C# Socket 多线程问题!启动一个线程:CheckForIllegalCrossThreadCalls false Thread th new Thread(n

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的地方套接字连接出错了
[解决办法]
另外就是多线程内使用另外主线程控件的问题了
看你这里的代码,这个你没报错应该没问题

热点排行