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这个按钮触发无限循环事件。
可是问题就出现在这里,我怎么都停不下来了

解决方案 »

  1.   

    private void Stop_Click(object sender, System.EventArgs e)
     {
    run=false;}
      

  2.   

    把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给锁住了,没法继续操作了。
      

  3.   

    在某个条件下给run设成false
    再好再循环里做
      

  4.   

    在条件那边做个限制
    比如while(run && "另外你手动控制的条件1"){}在外面给这个  另外你手动控制的条件1   状态   这样就可以控制了吧
      

  5.   

    应该是正如大家所说,我写的这个把UI锁死了。
    可是怎样再开启一个线程呢?
    刚刚接触C#,希望高人能详细指点,谢谢
      

  6.   


    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有错!!!
      

  7.   

    大家已经说的很清除了 开启新线程循环百度  net thread 或者msdn  了解更多线程资料
      

  8.   

    http://dl.dbank.com/c09ng7lu7f
    讲多线程的视频,基础的