读书人

怎样让这个无限循环停下来?(答复)

发布时间: 2012-04-21 14:34:44 作者: rapoo

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

读书人网 >C#

热点推荐