2011-12-19 4 views
3

현재주기적인 무거운 데이터 관리를 수행하는 백그라운드 스레드가 있습니다. 프로세스가 끝날 때 Thread.Sleep()을 호출하고 루프의 맨 위로 돌아가서 반복합니다.Thread.Sleep() 도용 디버거 포커스

이것은 모두 완벽하게 작동하며 나머지 소프트웨어에 대해서는 슬픔이나 성능 문제가 발생하지 않습니다. 버그가있는 유일한 방법은 디버거를 내 메인 스레드의 현재 위치로 이동하지 않고 깨뜨린 경우 Thread.Sleep()에 의해 도난 당해 대신 나를 데려 간다는 것입니다.

디버거가 해당 줄에서 멈추는 것을 막을 수있는 방법이 있습니까? 아니면 스레드를 절전 모드로 전환하는 다른 방법이 있습니까?

미리 감사드립니다.

답변

1

시도 할 수있는 한 가지 방법은 Thread.Sleep()을 메서드에 넣고 DebuggerStepThrough을 추가하는 것입니다.

"고정"스레드 창 (디버그 -> Windows -> 스레드)에서 "훔칠 포커스"싶지 않아요. 당신이`[DebuggerStepThrough]`나 '에 대한 Is Sleep() evil?

+0

감사를 참조 Thread.Sleep()를 사용하여 선호하는 옆으로 타이머 (두 가지가 있습니다) 또는 자동 리셋 이벤트를 사용으로

을 수행 할 때 또한 그들을 녹여 기억 d는 이전에 그것에 대해 생각했지만 속성만을위한 것이라고 생각했습니다. 어쩌면 나는'Thread.Sleep()'로 내 입장을 다시 생각해야한다. Timer가 작동하는 최선의 방법이라고 생각하지 않습니다. 메서드를 예약하는 .NET 2.0 방법이 있습니까? –

+1

좋아, 이제는 내 BgWorker를 마쳤고, 다음과 같이 사용했다 :'TimerCallback tc = new TimerCallback (bw.RunWorkerAsync); System.Threading.Timer t = new System.Threading.Timer (tc, null, Interval, Timeout.Infinite);' –