2012-06-12 3 views
0

데이터베이스에 데이터 업로드를 완료하면 발생하는 이벤트에 가입 한 UploadReportNotifier() 메서드가 있습니다. UploadReportNotifier() 내 GUI에서 일부 값 (예 : progressbars 등)을 재설정하고 싶지만이 작업을 수행하는 데 시간 지연이 있기를 원합니다.작업 내에서 스레드 만들기

UploadReportNotifier() 내에서 스레드를 만들고 thread.Sleep을 호출 할 수 있습니까? 아니면 timer() 클래스가 더 적절합니까?

도움 주셔서 감사합니다.

답변

1

해결책을 찾았습니다. 이 상황에서 항상 Thread + Sleep 이상의 타이머를 선택해야한다는 것을 말씀 드리고 싶습니다.이 imo는 항상 피해야하는 추한 해킹입니다.

타이머는 GUI 스레드에서 코드를 실행할 수 있기 때문에 훌륭하므로 Invoke 또는 BeginInvoke을 사용할 필요가 없습니다. 예를 들어, WinForms의 경우 System.Windows.Forms.Timer 또는 WPF의 경우 System.Windows.Threading.DispatcherTimer입니다.

+0

나는 그것이 내가 잘못했기 때문에 그것의 레이아웃이 바뀌었던 방식으로 생각했다. –

+0

당신과 Ken2K 모두 타이머를 제안하는 것처럼 보이므로 그 옵션을 사용할 것입니다. 당신의 도움을 주셔서 감사합니다. –

2

모든 GUI 컨트롤을 업데이트하기 전에 UploadReportNotifier을 실행 한 후 약간의 시간을 기다리는 것이 목표라면 타이머가 좋은 해결책이 될 것입니다.

UploadReportNotifier 방법에서는 몇 시간 후에 "내 GUI 업데이트"코드가 실행되도록 타이머를 생성하고 시작할 수 있습니다. GUI를 업데이트 한 후에 타이머를 중지/처리하는 것을 잊지 마십시오. 아마 여러 번 실행하지 않아도됩니다.

System.Windows.Forms.Timer 타이머 클래스를 사용할 수 있습니다 (사용 가능한 여러 가지 타이머 클래스가 있음). 이 코드는 가장 정확한 코드는 아니지만 UI 스레드에서 코드를 실행하므로 UI를 수정할 때 크로스 스레드 예외를 처리하지 않습니다.

+0

대단히 감사합니다. Ken, 많이 감사합니다! –

관련 문제