检查页面事件是否已触发

时间:2011-07-13 10:04:53

标签: c# asp.net events

我知道这可能是一个有点奇怪的问题,但是给定一个如下所示的Page类:

    public class abc:Control
    {
      public abc()
      {
        this.Init+=new EventHandler(foo);
        this.Load+=new EventHandler(foo);
      }    

      void foo(object sender, eventargs e)
      {
        //determine whether or not this.Init has already fired.
      }
    }

我知道我可以通过设置一个全局布尔值'hasinitfired'来做到这一点,但我想知道这是不是必要的,或者是否已经存在.net库的一部分。

3 个答案:

答案 0 :(得分:4)

为什么你需要知道init被触发了。在回发或回调期间,Init总是被触发。浏览ASP.net页面生命周期,您将知道在init之后触发的所有事件以及之前的所有事件。如果您打算对不同的事件使用相同的处理程序,则使用类变量来标识当前事件。我建议附加不同的处理程序,并使用不同的参数值调用另一个方法。

 public class abc:Control
    {
      public abc()
      {
        this.Init+=new EventHandler(foo1);
        this.Load+=new EventHandler(foo2);
      }    

      void foo1(object sender, eventargs e)
      {
        foo('init');
      }
      void foo2(object sender, eventargs e)
      {
        foo('load');
      }
      void foo(string from)
      {
         // do something
      }

    }

这将为添加功能提供更清晰的解决方案和灵活性。

答案 1 :(得分:1)

我猜你想知道当foo运行时init是否被触发了。正如@Adam所说,如果你想看看你的应用程序在做什么,那么跟踪会让你这样做。

虽然它正在运行,但正如你所建议的那样,我看到它的最佳方式是使用旗帜。

西蒙

答案 2 :(得分:0)

这看起来像是你使用.NET Trace类的东西。您可以使用trace将文本放入Visual Studio输出窗口。

Trace.WriteLine("Method called.");

.NET中的跟踪比我的示例有更多选项:

http://www.15seconds.com/issue/020910.htm

更进一步,您可以使用PostSharp方面来装饰此方法,但这是第三方库。