2010-04-09 4 views
2

Windows 양식을 사용하고 있으며 감사 작업을 30 초마다 수행하려고합니다. 이 감사는 본질적으로 원격 컴퓨터에서 일련의 서비스를 확인하고 상태를 richtextbox로 다시보고합니다.정기 감사 및 모범 사례 수행

현재이 배경 화면은 끝이없는 백그라운드 스레드에서 실행되며 호출자를 사용하여 기본 양식의 richtextbox를 업데이트합니다.

이 모범 사례입니까? 내 버튼이 작동하지 못하게하는 주요 폼에서 끝없는 반복을 만들었다면, 맞습니까?

주기적인 감사 확인을 만들 때마다 상태 또는 파일을 검사하는 새 스레드를 만들어야하는지 또는 무엇을 가지고 있는지 궁금합니다.

편집 : Timer 클래스를 자세히 살펴보면서 더 긴 함수를 사용하면 더 좋은 것으로 판명 된 System Timer과 함께 결정했습니다. 나를 올바른 방향으로 가리켜 주셔서 감사합니다.

답변

4

Windows Forms Timer class을 살펴 봐야합니다. 기본 양식에 루프가 필요하지 않습니다. 타이머를 사용하여 다른 스레드에서 비동기 적으로 처리 할 수있는 이벤트를 발생시키는 것이 좋습니다.

+0

이것은 내가 찾고있는 것 같습니다. 하나의 질문. 이것은 타이머 기능이 수행되는 동안 UI를 잠글까요? – DTown

+0

다른 스레드에서 컨트롤에 액세스하려고 할 때마다 UI가 잠길 수 있습니다. InvokeRequired 속성을 익히고 MethodInvoker http://www.csharper.net/blog/methodinvoker___anonymous_methods___teh_r0x0r.aspx를 확인하십시오. –

1

는 주 스레드에서 호출

길을 가야하는 것입니다 (나는 이것이의 WinForm 응용 프로그램입니다 가정). 하지만 무한 루프 대신 timer을 사용하는 것은 어떨까요? 그것은 당신에게 더 많은 통제력을 제공합니다. 그리고 타이머 함수는 자신의 스레드에서 실행됩니다.

주 스레드가 UI에서 작동 할 수 있도록 장시간 작업을 백그라운드 스레드에서 실행하는 것이 좋습니다.