我要实现下面的功能:运行一个程序——出现主界面,后台自动去读串口数据(当然串口可能没有数据,然后等待,不停的读),现在自动读写串口没有问题,不知道怎么把这个后台程序跟主界面联系起来,请高手指点一下。
由于读串口的操作是不停进行的,只要主窗体不销毁就一直读,这里我用while(条件),但是不知道这个条件该怎么判断。
我尝试了在主窗体load事件中调用写好的读写串口程序——结果主窗体都出不来了。

解决方案 »

  1.   

    load是处于界面线程中的,
    在界面线程中执行一个循环,你这个循环不停止,界面就不会被绘出来,所以你要在界面上另开一个线程来执行这个读串口的操作。
    Form_load
    {
    Thread thread=new Thread(读串口的函数);
    thread.start();
    }
    条件你可以直接用true。
    因为这个线程是在主窗体上生成的,主窗体关闭,这个线程就自动销毁。
      

  2.   

    你在load中读数据,结果造成了阻塞,
    起一个线程来读数据,这样界面就不会被假死,
    然后在线程中刷新显示,
    在窗口的Close 事件中结束此线程就好了
      

  3.   

    我又在窗体关闭里面加了线程结束才把那个线程结束了:
    private void meter_FormClosed(object sender, FormClosedEventArgs e)
            {
                Thread_RW_sp.Abort();
            }
      

  4.   

    设置一个属性就可以了Thread thread=new Thread(读串口的函数);
    thread.IsBackground = true; //就是这个属性
    thread.start(); 
      

  5.   

    试了一下,果然这样,这就省了再去用窗体.closed里面用abort函数了。谢谢啊,给加分