只是一个小问题:调试器是否可以在事件触发时进行中断?
非常感谢。
答案 0 :(得分:0)
您无法为在应用程序上引发的所有事件注册全局处理程序,但您可以在Reflection的帮助下实际注册自己的静态事件处理程序:
public class Program
{
public static void Main(string[] args)
{
MethodInfo handler = typeof(Program).GetMethod("GlobalEventHandler");
IEnumerable<EventInfo> events = AppDomain.CurrentDomain
.GetAssemblies()
.Select(a => a.GetTypes()
.Select(t => t.GetEvents(
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Static)
.Where(e => typeof(EventHandler)
.IsAssignableFrom(e.EventHandlerType))))
.SelectMany(e => e)
.SelectMany(e => e);
foreach (EventInfo evt in events)
evt.GetAddMethod(true).Invoke(null, new object[]
{
Delegate.CreateDelegate(evt.EventHandlerType, null, handler)
});
}
public static void GlobalEventHandler(object sender, EventArgs args)
{
Debugger.Break(); // <-- When a static event is fired, the application will break here
Console.WriteLine("An event was fired!");
}
支持的静态事件并不多。
16实际: