最近因为工作需要用到串口,根据网友的建议新开了一个串口监听线程!程序很简单,只是向串口发送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个串口;
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个串口;
我后来用的虚拟串口,而且虚拟串口号也换过好几个,问题依旧;
那为什么线程一打开其状态就是stopped呢?
所以程序进入串口线程后,没做任何事情,操作系统以为线程使用已完成,就自动销毁了该线程!
感谢HolyPlace的及时回复!