2011-12-19 111 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