【问题标题】:Thread.Sleep() stealing debuggers focusThread.Sleep() 窃取调试器焦点
【发布时间】:2011-12-19 14:26:58
【问题描述】:

目前我有一个后台线程来执行一些周期性的繁重数据管理。因为它只需要每隔几百毫秒运行一次它的进程,所以我在进程结束时调用Thread.Sleep(),然后它会回到循环顶部并重复。

这一切运行良好,不会对软件的其余部分造成任何问题或性能问题。唯一让我烦恼的是,当我中断调试器而不是转到我的主线程当前位置时,它被Thread.Sleep() 窃取并带我去那里。

有什么方法可以让调试器停止在那条线上,或者有没有其他方法可以让线程进入睡眠状态?

提前致谢!

【问题讨论】:

    标签: c# multithreading visual-studio


    【解决方案1】:

    您可以尝试的一件事是将Thread.Sleep() 放入一个方法中并在其上添加DebuggerStepThrough。

    您也可以从线程窗口(调试 -> Windows -> 线程)“冻结”您不想“窃取焦点”的内容。完成后还要记得解冻它们

    顺便说一句,使用计时器(有两个)或自动重置事件优于使用Thread.Sleep() 请参阅Is Sleep() evil?

    【讨论】:

    • 感谢[DebuggerStepThrough],我之前考虑过,但认为它仅适用于属性。也许我应该重新考虑我在Thread.Sleep() 的立场。我不认为 Timer 是其完整工作方式的最佳主意。是否有 .NET 2.0 方法来安排方法?
    • 好的,我现在完成了我的 BgWorker,并在完成时使用:TimerCallback tc = new TimerCallback(bw.RunWorkerAsync); System.Threading.Timer t = new System.Threading.Timer(tc, null, Interval, Timeout.Infinite);
    猜你喜欢
    • 2015-09-26
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多