【问题标题】:How to stop timer while debugging调试时如何停止计时器
【发布时间】:2012-03-23 09:15:23
【问题描述】:

所以我设置了一个System.Timers.Timer 并为Elapsed 事件提供了一个处理程序。它按预期工作。

但是,如果我想调试在 elapsed 处理程序中调用的代码;计时器将继续生成其他事件。因此,我无法单步执行代码,因为计时器事件会叠加在一起。

当前的解决方法是在进入处理程序时在计时器上调用Stop,在离开时调用Start。然而,这不是系统应该如何工作的,所以这是一个临时修复。我想知道是否有办法将调试器配置为在调试时暂停计时器。

【问题讨论】:

    标签: c# visual-studio-debugging


    【解决方案1】:

    如果你愿意,你可以把它包装成#if DEBUG directive 或者你可以使用System.Diagnostics.Debugger.IsAttached

    【讨论】:

    • +1 - 对于 Debugger.IsAttached 属性。我想我比#if 更喜欢它。
    • 老实说:这取决于您想要实现的目标 - 使用 #if 您的发布版本中根本没有代码,而另一个选项将是未使用的代码-那里的路径。
    【解决方案2】:

    在您的Timer.Elapsed 事件处理程序中,也许您可​​以使用一些预处理器指令来包含停止和启动(或禁用和启用)计时器的代码:

        private static void OnTimedEvent(object source, ElapsedEventArgs e)
        {
    #if DEBUG
            (source as Timer).Stop();
            // or
            (source as Timer).Enabled = false;
    #endif
    
            // do your work
    
    #if DEBUG
            (source as Timer).Start();
            // or
            (source as Timer).Enabled = true;
    #endif
        }
    

    【讨论】:

    • 我将停止和启动作为临时解决方法。我不是预处理器指令的粉丝。但如果那是我选择的唯一方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多