各位老大:
小弟做了个多线程的列子,准备在load事件中调用,结果只执行了一个方法就停止了,窗体也没有显示出来?请各位老大指教....源码如下:
public enum Quantity
{
Header = 0x05, //头命令
MastServers = 0x10, //通信方向主---》从
ServesMast = 0x01, //通信方向从---》主
MachineNo=0x00, //机器号
} public Form1()
{
InitializeComponent();
} #region 公共代码 public void ExecuteCommond(int comStatus,int dateCount)
{
port = new SerialPort(conName, 9600, Parity.Even, 8, StopBits.One); if (port.IsOpen == false)
{
port.Open();
} //获得校验位,是5个参数的总和
int CheckSum =Convert.ToInt32(Quantity.Header) +Convert.ToInt32( Quantity.MastServers) +
Convert.ToInt32(Quantity.MachineNo) + Convert.ToInt32(comStatus )+ Convert.ToInt32(dateCount); //执行命令
char[] vales = { Convert.ToChar(Quantity.Header), Convert.ToChar(Quantity.MastServers),
Convert.ToChar(Quantity.MachineNo),Convert.ToChar(comStatus),
Convert.ToChar(dateCount), Convert.ToChar(CheckSum) };
//把命令写入串口,执行
port.Write(vales, 0, vales.Length); int bytes = 0;
while (bytes < 5)
{
bytes = port.BytesToRead;
}
byte[] buffer = new byte[bytes]; port.Read(buffer, 0, bytes);
switch (comStatus)
{
case 0x11:
switch (buffer[4])
{
case 0:
MessageBox.Show("出币器正常");
break;
case 1:
MessageBox.Show("硬币不足");
break;
case 2:
MessageBox.Show(" 缺币");
break;
case 3:
MessageBox.Show("菱镜光电感知器故障");
break;
case 4:
MessageBox.Show("通道光电感知器故障");
break;
case 5:
MessageBox.Show("马达正在忙中");
break;
}
break;
case 0x13:
switch (buffer[4])
{
case 0:
MessageBox.Show("硬币数量不多");
break;
case 1:
MessageBox.Show("没有硬币了");
break;
}
break;
} port.Close();
}
public void SelectStatus() //查询状态
{
int cmdStatus = 0x11;
int dateCount = 0x00;
this.ExecuteCommond(cmdStatus, dateCount);
} public void SelectCoinCount() //查询硬币的数量
{
int cmdStatus = 0x13;
int dateCount = 0x00;
this.ExecuteCommond(cmdStatus, dateCount);
}Load事件中调用代码如下:
Thread threads = new Thread(new ThreadStart(this.SelectCoinCount));
threads.Start(); Thread.Sleep(1000);
Thread sutatus = new Thread(new ThreadStart(this.SelectStatus));
sutatus.Start();
各位请踊跃发言啊
小弟做了个多线程的列子,准备在load事件中调用,结果只执行了一个方法就停止了,窗体也没有显示出来?请各位老大指教....源码如下:
public enum Quantity
{
Header = 0x05, //头命令
MastServers = 0x10, //通信方向主---》从
ServesMast = 0x01, //通信方向从---》主
MachineNo=0x00, //机器号
} public Form1()
{
InitializeComponent();
} #region 公共代码 public void ExecuteCommond(int comStatus,int dateCount)
{
port = new SerialPort(conName, 9600, Parity.Even, 8, StopBits.One); if (port.IsOpen == false)
{
port.Open();
} //获得校验位,是5个参数的总和
int CheckSum =Convert.ToInt32(Quantity.Header) +Convert.ToInt32( Quantity.MastServers) +
Convert.ToInt32(Quantity.MachineNo) + Convert.ToInt32(comStatus )+ Convert.ToInt32(dateCount); //执行命令
char[] vales = { Convert.ToChar(Quantity.Header), Convert.ToChar(Quantity.MastServers),
Convert.ToChar(Quantity.MachineNo),Convert.ToChar(comStatus),
Convert.ToChar(dateCount), Convert.ToChar(CheckSum) };
//把命令写入串口,执行
port.Write(vales, 0, vales.Length); int bytes = 0;
while (bytes < 5)
{
bytes = port.BytesToRead;
}
byte[] buffer = new byte[bytes]; port.Read(buffer, 0, bytes);
switch (comStatus)
{
case 0x11:
switch (buffer[4])
{
case 0:
MessageBox.Show("出币器正常");
break;
case 1:
MessageBox.Show("硬币不足");
break;
case 2:
MessageBox.Show(" 缺币");
break;
case 3:
MessageBox.Show("菱镜光电感知器故障");
break;
case 4:
MessageBox.Show("通道光电感知器故障");
break;
case 5:
MessageBox.Show("马达正在忙中");
break;
}
break;
case 0x13:
switch (buffer[4])
{
case 0:
MessageBox.Show("硬币数量不多");
break;
case 1:
MessageBox.Show("没有硬币了");
break;
}
break;
} port.Close();
}
public void SelectStatus() //查询状态
{
int cmdStatus = 0x11;
int dateCount = 0x00;
this.ExecuteCommond(cmdStatus, dateCount);
} public void SelectCoinCount() //查询硬币的数量
{
int cmdStatus = 0x13;
int dateCount = 0x00;
this.ExecuteCommond(cmdStatus, dateCount);
}Load事件中调用代码如下:
Thread threads = new Thread(new ThreadStart(this.SelectCoinCount));
threads.Start(); Thread.Sleep(1000);
Thread sutatus = new Thread(new ThreadStart(this.SelectStatus));
sutatus.Start();
各位请踊跃发言啊
Thread threads = new Thread(new ThreadStart(this.SelectCoinCount));
threads.Start();//////////////////////////////
在这里加一个lock保证一个线程执行完这段代码之后另外一个线才执行这段代码,线程有序
////////////////////////////// Thread.Sleep(1000);
Thread sutatus = new Thread(new ThreadStart(this.SelectStatus));
sutatus.Start();