怎样让这个无限循环停下来?(在线等答复)
[code=C#][/code]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这个按钮触发无限循环事件。
可是问题就出现在这里,我怎么都停不下来了。。。
------解决方案--------------------private void Stop_Click(object sender, System.EventArgs e)
{
run=false;
}
------解决方案--------------------把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);
}
这些东西放到一个单独的线程里面去做,你在主线程里做这个就把UI给锁住了,没法继续操作了。
------解决方案--------------------死循环 会锁死ui界面和卡屏一样 要用线程启动
------解决方案--------------------线程都卡在那边了,你外面判断有什么用,只能放在另一个线程处理
------解决方案--------------------在条件那边做个限制
比如while(run && "另外你手动控制的条件1"){}
在外面给这个 另外你手动控制的条件1 状态
这样就可以控制了吧
------解决方案--------------------把
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有错!!!
------解决方案--------------------大家已经说的很清除了 开启新线程循环
百度 net thread 或者msdn 了解更多线程资料