标题:控制台程序和windows窗体下的同步通信
只看楼主
hellold77
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-5-30
 问题点数:0 回复次数:2 
控制台程序和windows窗体下的同步通信
在控制台程序中用下面这段代码可以不断的接收送至端口的数据
        static void Main(string[] args)
        {
            Console.WriteLine("Sever is running...");
            IPAddress ip = new IPAddress(new byte[] {192,168,2,68});
            TcpListener listener = new TcpListener(ip,3000);
            listener.Start();

            TcpClient tcpClient = listener.AcceptTcpClient();
            
            NetworkStream ns = tcpClient.GetStream();

            while (true)
            {
                byte[] data = new byte[tcpClient.ReceiveBufferSize];

                int numBytesRead = ns.Read(data, 0, System.Convert.ToInt32(tcpClient.ReceiveBufferSize));
                Console.WriteLine(Encoding.ASCII.GetString(data, 0, numBytesRead));
            }
但是在windows窗体中把这个代码做成一个函数,然后用button调用这个函数使其在文本中显示就不可以,窗体始终没有响应,这是什么原因?
         private void ReceiveData()
         {           
            IPAddress ip = new IPAddress(new byte[] {192,168,2,68});
            TcpListener listener = new TcpListener(ip,3000);
            listener.Start();

            TcpClient tcpClient = listener.AcceptTcpClient();
            
            NetworkStream ns = tcpClient.GetStream();

            while (true)
            {
                byte[] data = new byte[tcpClient.ReceiveBufferSize];

                int numBytesRead = ns.Read(data, 0, System.Convert.ToInt32(tcpClient.ReceiveBufferSize));
                //Console.WriteLine(Encoding.ASCII.GetString(data, 0, numBytesRead));
                string msg=Encoding.ASCII.GetString(data,0,numBytesRead);
                textBoxTheDataReceived.Text = msg;
            }
         }
         private void buttonConnectVision_Click(object sender, EventArgs e)
         {
             ReceiveData();
         }
搜索更多相关主题的帖子: 通信 
2011-09-26 14:58
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:0 
代码是没有问题的,这个现象就是我们常说的窗体假死现象,从你在button的click事件中就可以看出,这是一个单线程程序,而ns.read是线程阻塞的,也就是没有数据过来的时候,线程会一直停留在这里等待,这个时候,窗体就假死了,是看不到任何东西的.一般有线程阻塞的方法都需要使用另外的线程去调用,而不影响主线程
2011-09-30 14:08
Jiedy91
Rank: 2
来 自:湖北武汉
等 级:论坛游民
帖 子:37
专家分:20
注 册:2011-10-9
得分:0 
高手啊!新生路过!

智机能手
2011-10-09 17:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-350922-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.097912 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved