2011-12-19 41 views
3

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

这是完美的工作,并不会导致任何其他软件的悲伤或性能问题。唯一能够解决问题的方法是当我打破调试器而不是去我的主线程当前位置时,它会被Thread.Sleep()所盗取,并将我带到那里。

有没有什么办法可以禁止调试器停止在那一行,或者是否有其他方法让线程进入休眠状态?

在此先感谢!

回答

1

你可以尝试的一件事是将Thread.Sleep()放在方法中,并在其上添加DebuggerStepThrough。你也可以只是“冻结”你不想从线程窗口(调试 - > Windows - >线程)“窃取焦点”。还记得解冻它们当你完成

顺便使用定时器(有两个)或自动复位事件最好使用Thread.Sleep()Is Sleep() evil?

+0

感谢'[DebuggerStepThrough]',我d先前曾考虑过它,但曾认为它仅适用于Properties。也许我应该用'Thread.Sleep()'重新考虑我的立场。我不觉得一个计时器是最好的办法,它的完整工作方式。有没有.NET 2.0的方法来安排一种方法? – 2011-12-19 06:36:19

+1

好吧,我现在有我的BgWorker完成,并在完成我使用:'TimerCallback tc = new TimerCallback(bw.RunWorkerAsync); System.Threading.Timer t = new System.Threading.Timer(tc,null,Interval,Timeout.Infinite);' – 2011-12-19 06:39:16