日期:2014-05-18  浏览次数:20774 次

停止线程异常
串口打开后,开启接收线程,程序正常运行
C# code

 serialsReceiveThread = new Thread(new ThreadStart(serialReceive));
 serialsReceiveThread.Start();//开始接收线程




当我关闭串口时,应该先停止接收线程,但是报异常了,何解?

代码如下:
C# code


//根据当前串口对象,来判断操作
            if (comm.IsOpen)
            {
                try
                {
                    serialsReceiveThread.Abort();
                    if (ThreadState.Stopped == serialsReceiveThread.ThreadState)
                    {
                        //打开时点击,则关闭串口
                        comm.Close();
                    }
                }
                catch (Exception ex) 
                {
                    MessageBox.Show(ex.Message);
                }
                
            }



------解决方案--------------------
你终止线程时,线程是否在正常运行,还是已经挂起,你参考 Thread..::.Abort 的msdn看看里面的说明
------解决方案--------------------
serialsReceiveThread.Suspend(); 这方法都已经废除了。

做个空判断跳过即可。
------解决方案--------------------
lz是C板块大神啊。

while(true){}

可以改成 while(true)
{

CheckPass();
//other process
}

在起线程的时候生成一个Dictionary<string, ThreadStatus>

string是Thread的唯一标识
enum ThreadStatus{}里面写上你需要的线程的状态。

CheckPass()检测当前线程的状态,根据状态每个线程自身决定自身的运行状态。