我在button_click事件中做循环了,循环里的事就是从串口读数据,然后在textbox里显示出来。
 在循环里用了这个语句:System.Threading.Thread.Sleep(2000),实现每两秒循环一次。那么我想textbox中的值的变化应该能看的很清楚,可是这样一来,每次点button的时候程序就死了。大家告诉我怎么才能做循环,是不是因为textbox的值只会在button_click事件结束之后才能显示。而我的button_click事件里的一部分程序一直在循环,程序就死了?

解决方案 »

  1.   

    别写在click里面
    把这个事件封装成一个方法
    使用Click是调用个线程去执行这个方法
      

  2.   

    何不用线程写呢?你在button_click里写循环,用了当前的UI线程,导致程序界面没有响应,用backgroudworker更好一点
      

  3.   

    用Thread,怎么写线程帮助里很多
      

  4.   

    void Method(){}protect void button1_Click()
    {
        while(true)
         {
            Method();
         }
      

  5.   


    private void button_click(object sender,eventargs e)
    {
    Thead thead = new Thead(new ThreadStart(acceptString))
    thead.start();
    }//定义委托
            delegate void Change(string msg);
            /// <summary>
            /// 改变TextBox内容
            /// </summary>
            /// <param name="msg">信息</param>
            public void changeText(string msg)
            {
                this.textBox.AppendText(Environment.NewLine  + msg);
            }        /// <summary>
            /// 显示接收到的内容
            /// </summary>
            void acceptString()
            {
                while (true)
                {
                    string msg = datetime.now.tostring();
                    if (string.IsNullOrEmpty(msg) == false)
                    {
                        //在TextBox中显示接收到的内容
                        //由于不能在非主线程中更改TextBox内容,所以在此处用委托实现
                        this.Invoke(new Change(changeText), msg);
                    }
                    thead.sleep(2000);
                }
            }
      

  6.   

    是用SerialPort对象读取串口数据的吗?SerialPort.DataReceive()就可以反复读取数据了。