private void Run_Click(object sender, System.EventArgs e)
{
try
{
if(bOpen && rsModule != null)
{
string ARM="030300230001"; //发送读ARM版本号指令
ARM += CRC.CalculateCRC(ARM);
byte[] m_BT1 = ModbusCmdStrToByte(ARM);
rsModule.AddTxQueue(m_BT1);
run=true; while(run)
{
string SendData1="0303002B0009"; //发送读门状态指令
SendData1 += CRC.CalculateCRC(SendData1);
byte[] m_BT2 = ModbusCmdStrToByte(SendData1);
rsModule.AddTxQueue(m_BT2);
CheckEvent.Reset();
CheckEvent.WaitOne(2000,true);
Thread.Sleep(500);
}
}
}
这个run我设的是全局变量,程序想实现的是:点一下run这个按钮触发无限循环事件。
可是问题就出现在这里,我怎么都停不下来了
{
try
{
if(bOpen && rsModule != null)
{
string ARM="030300230001"; //发送读ARM版本号指令
ARM += CRC.CalculateCRC(ARM);
byte[] m_BT1 = ModbusCmdStrToByte(ARM);
rsModule.AddTxQueue(m_BT1);
run=true; while(run)
{
string SendData1="0303002B0009"; //发送读门状态指令
SendData1 += CRC.CalculateCRC(SendData1);
byte[] m_BT2 = ModbusCmdStrToByte(SendData1);
rsModule.AddTxQueue(m_BT2);
CheckEvent.Reset();
CheckEvent.WaitOne(2000,true);
Thread.Sleep(500);
}
}
}
这个run我设的是全局变量,程序想实现的是:点一下run这个按钮触发无限循环事件。
可是问题就出现在这里,我怎么都停不下来了
{
run=false;}
{
string SendData1="0303002B0009"; //发送读门状态指令
SendData1 += CRC.CalculateCRC(SendData1);
byte[] m_BT2 = ModbusCmdStrToByte(SendData1);
rsModule.AddTxQueue(m_BT2); CheckEvent.Reset();
CheckEvent.WaitOne(2000,true);
Thread.Sleep(500); }
这些东西放到一个单独的线程里面去做,你在主线程里做这个就把UI给锁住了,没法继续操作了。
再好再循环里做
比如while(run && "另外你手动控制的条件1"){}在外面给这个 另外你手动控制的条件1 状态 这样就可以控制了吧
可是怎样再开启一个线程呢?
刚刚接触C#,希望高人能详细指点,谢谢
while(run)
{
string SendData1="0303002B0009"; //发送读门状态指令
SendData1 += CRC.CalculateCRC(SendData1);
byte[] m_BT2 = ModbusCmdStrToByte(SendData1);
rsModule.AddTxQueue(m_BT2);CheckEvent.Reset();
CheckEvent.WaitOne(2000,true);
Thread.Sleep(500);}
写在一个方法里面,在调用这个方法:
还有就是可能你的run有错!!!
讲多线程的视频,基础的