最近因为工作需要用到串口,根据网友的建议新开了一个串口监听线程!程序很简单,只是向串口发送001或者000之类的字符串,实现方式如下:
    
    namespace MyProject
    {
        public partial class FormMain : Form
        {
            private Thread serialProcessThread;//定义串口进程
            
            private void FormMain_Load(object sender, EventArgs e)
            {
            try
            {
                 serialPort = new SerialPort(ConfiGure.ComPort, 9600, Parity.None, 8, StopBits.One);
                
                 //创建串口信息处理线程
                 serialProcessThread = new Thread(new ThreadStart(this.SerialProcessThread));
                 serialProcessThread.Start();
                 
                 MessageBox.Show("线程的状态为:"+serialProcessThread.ThreadState.ToString());//这一句是后来
//加上去的并且其输出一直为:线程的状态为:Stopped
            }          //串口监听线程
          private void SerialProcessThread()
          {   
             //因为串口状态一直是stopped,所以此处的代码一直不能够执行
              .......
          }
             
    
    其实本来在我电脑上执行是好的,可是拿到公司测试部门那边,串口线程就一直不予执行,刚开始不知道,后来跟踪串口状态,在串口打开后就输出串口状态,显示状态为Stopped;而且我上网查了下,发现如果线程状态为Stopped的话,那线程将永远不能转移到其他状态了;
    因为状态为Stopped,所以也就不存在死锁了(注意,我电脑重启后,状态还是Stopped);
    望高人指点到底什么地方出现问题了,因为线程用的不多,所以至今不知道问题的原因所在;
   PS,这个跟电脑上串口数量有没有问题呢?因为我电脑上的串口数量是1个,而测试那边有2个串口;

解决方案 »

  1.   

    谢谢 holyplace
    我后来用的虚拟串口,而且虚拟串口号也换过好几个,问题依旧;
    那为什么线程一打开其状态就是stopped呢?
      

  2.   

    问题已经解决了,是因为我在串口监听线程中有个状态判断,而当时状态的值为FALSE,
    所以程序进入串口线程后,没做任何事情,操作系统以为线程使用已完成,就自动销毁了该线程!
    感谢HolyPlace的及时回复!