none
如何防止Form控件之间的消息死循环? RRS feed

  • 问题

  • 我的一个Form控件中有两个控件A和B , 类似Photoshop的改变窗口大小中的宽度和高度。

    当用户改变A的时候, 程序自动修改B的值。 当用户修改B的时候,程序自动修改A。

    但现在的问题是,我修改该任意一个控件的值以后(如:A),他就会修改B。而B的Onchanged事件又去修改A,。。。直接导致消息死循环了:(

    我记得VC好像有个函数可以可以声明目前 Form中的窗体都处于后台更新的状态。 不会自动触发任何窗体事件来着。 但是不知道在C#中应该如何使用呢。

    谢谢

    Charles shao

    2010年4月15日 9:03

答案

  • 事件的sender可以知道是那里触发的,在B中检查这个来源,如果是A那里过来的就不触发A的事件。

     


    family as water
    2010年4月15日 9:30
  • 你好!

    我一般使用一个变量进行状态标实来解决这个问题。

    我举个例子:有两个方法 A, B。A 调用  B,B 再调用 A,导致了死循环。

    我的解决方法如下:

    bool sysAction = false;
    
    void A()
    {
      if (sysAction == true)
        return;
      try
      {
        sysAction = true;
        B(); 
      }
      finally
      {
        sysAction = false;
      }
    }
    
    void B()
    {
      A();
    }


    知识改变命运,奋斗成就人生!
    2010年4月15日 9:33
    版主

全部回复

  • 事件的sender可以知道是那里触发的,在B中检查这个来源,如果是A那里过来的就不触发A的事件。

     


    family as water
    2010年4月15日 9:30
  • 你好!

    我一般使用一个变量进行状态标实来解决这个问题。

    我举个例子:有两个方法 A, B。A 调用  B,B 再调用 A,导致了死循环。

    我的解决方法如下:

    bool sysAction = false;
    
    void A()
    {
      if (sysAction == true)
        return;
      try
      {
        sysAction = true;
        B(); 
      }
      finally
      {
        sysAction = false;
      }
    }
    
    void B()
    {
      A();
    }


    知识改变命运,奋斗成就人生!
    2010年4月15日 9:33
    版主