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

怎样让这个无限循环停下来?(在线等答复)
[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 了解更多线程资料