2016-09-27 13 views
0

ちょっと質問があります:イベントが発生したときにデバッガがブレークする可能性はありますか?Visual Studioでイベントが発生するたびにデバッガを中断する

ありがとうございます。

+3

どのイベントですか?それを購読し、ブレークポイントを入れてください。 – Sinatr

+0

https://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.break(v=vs.110).aspx – apocalypse

+0

私に説明しましょう: 私はデバッガモードです。コード内の既存のイベントが発生したときはいつでも休憩したいです。私は、200,000のイベントのような100000行のコードを持っています。私はちょうど、いつも存在するイベントが発砲しているときはいつも休憩したいと思っています。 あなたは今理解していただければ幸いです。 – TheOnionMaster

答えて

0

あなたはアプリケーションに引き上げるすべてののイベントのためのグローバルなハンドラを登録することはできませんが、実際には反射の助けを借りて、静的イベント用に独自のハンドラを登録することができます

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. Application.ApplicationExit
  2. Application.Idle
  3. Application.EnterThreadModal
  4. Application.LeaveThreadModal
  5. Application.ThreadExit
  6. ToolStripManager.RendererChanged
  7. SystemEvents.DisplaySettingsChanging
  8. SystemEvents.DisplaySettingsChanged
  9. SystemEvents.EventsThreadShutdown
  10. SystemEvents.InstalledFontsChanged
  11. SystemEvents.LowMemory
  12. SystemEvents.PaletteChanged
  13. SystemEvents.TimeChanged
  14. ComponentDispatcher.ThreadIdle
  15. ComponentDispatcher.EnterThreadModal
  16. ComponentDispatcher.LeaveThreadModal
関連する問題