在Visual Studio中触发事件时中断调试器

时间:2016-09-27 14:38:59

标签: c# visual-studio debugging events break

只是一个小问题:调试器是否可以在事件触发时进行中断?

非常感谢。

1 个答案:

答案 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实际

  1. MSDN
  2. Application.ApplicationExit
  3. Application.Idle
  4. Application.EnterThreadModal
  5. Application.LeaveThreadModal
  6. Application.ThreadExit
  7. ToolStripManager.RendererChanged
  8. SystemEvents.DisplaySettingsChanging
  9. SystemEvents.DisplaySettingsChanged
  10. SystemEvents.EventsThreadShutdown
  11. SystemEvents.InstalledFontsChanged
  12. SystemEvents.LowMemory
  13. SystemEvents.PaletteChanged
  14. SystemEvents.TimeChanged
  15. ComponentDispatcher.ThreadIdle
  16. ComponentDispatcher.EnterThreadModal
相关问题