2011-02-25 3 views
2

사용자에게 실행 가능한 보고서 목록이있는보고 시스템이 있습니다. 내가 할 수 있기를 원하는 것은 주기적으로 응용 프로그램에 SQL 서버에 대한 새로운 보고서를 찾고 사용 가능한 보고서 목록을 다시 채우는 것입니다.C# 응용 프로그램이 실행 중일 때 새 응용 프로그램 항목을 확인하십시오.

하지만 응용 프로그램을 잠그지 않고이 작업을 수행하고 싶습니다.이 작업을 원활하게 수행하고 사용자가 상황이 발생하고 있음을 알지 못하게하고 싶습니다.

가능한 가장 효율적인 방법은 무엇입니까?

고맙습니다.

답변

2

질문이 있으시면 사용자에게 영향을주지 않고 백그라운드 스레드에서이 작업을 수행하고 완료되면 GUI를 업데이트 할 수 있습니다.

BackgroundWorker 도우미 클래스를 살펴보십시오.

+0

BackgroundWorker 클래스 내에서 클래스 폼의 기본 폼을 참조해야하며 기본 폼에서 공용 컨트롤을 수정해야합니다. – mattgcon

+0

처리 방법은 다양하지만 공개 컨트롤/변수가 가장 쉽습니다. 그러나 잘못된 스레드에서 컨트롤을 수정하는 것은 허용되지 않으므로 Invoke에 대해 배우게됩니다. –

2

폴링을 수행 할 백그라운드 스레드를 사용하는 것이 좋습니다. 새 Thread 객체를 시작하고 서버를 폴링하고 각 확인 후에 대기 할 수 있습니다. 변경 사항을 발견하면 데이터를 가져올 수 있으며 다른 스레드에서 수행 할 수 없으므로 Invoke를 호출하여 GUI를 업데이트해야합니다.

다른 방법은 타이머를 사용하고 Tick 이벤트 내부에서 검사를 수행하는 것입니다. 그러나 검사가 오랜 시간이 걸리는 경우 (서버가 사용 중이거나 테이블 잠금이있는 경우 시간이 오래 걸릴 수 있습니다) 그것은 당신의 신청을 막을 것이므로 나는이 접근법에 반대 할 것을 권고한다.

관련 문제