我知道这可能是一个有点奇怪的问题,但是给定一个如下所示的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库的一部分。
答案 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方面来装饰此方法,但这是第三方库。