在Visual Studio中触发事件时中断调试器
本文关键字:事件 中断 调试器 Visual Studio | 更新日期: 2023-09-27 18:09:15
只是一个小问题:调试器是否有可能在事件触发时中断?
你不能为在应用程序中引发的所有事件注册一个全局处理程序,但是你可以为静态事件注册你自己的处理程序,在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实际上:
- 应用程序。ApplicationExit
- 应用程序。闲置
- 应用程序。EnterThreadModal
- 应用程序。LeaveThreadModal
- 应用程序。ThreadExit
- ToolStripManager。RendererChanged
- SystemEvents。DisplaySettingsChanging
- SystemEvents。DisplaySettingsChanged
- SystemEvents。EventsThreadShutdown
- SystemEvents。InstalledFontsChanged
- SystemEvents。LowMemory
- SystemEvents。PaletteChanged
- SystemEvents。TimeChanged
- ComponentDispatcher。ThreadIdle
- ComponentDispatcher。EnterThreadModal
- ComponentDispatcher。LeaveThreadModal