문제

SQL Server 2000 데이터베이스를 복원하기 위해 Microsoft.sqlserver.management.smo.restore 객체를 사용하려고합니다. 복원 작업을 시작하기 직전에 레이블의 텍스트를 변경하여 사용자가 무슨 일이 일어나고 있는지 알 수 있습니다. 그러나 변경된 텍스트는 GUI에서 볼 수 없습니다 (즉, 텍스트는 FullRestore.wait () 행 이후까지 텍스트가 동일하게 유지됩니다.

lblStatus.Text = "Restoring Database";
Restore fullRestore = new Restore(); 

// Configure fullRestore

fullRestore.SqlRestore(_server);
fullRestore.Wait();

이상한 점은 Lblstatus가 결국 "복원 데이터베이스"를 표시하지만 ~ 후에 복원이 완료되었습니다. 어떤 아이디어?

도움이 되었습니까?

해결책

GUI 스레드를 차단하여 업데이트를 방지하고 있습니다. lblstatus.refresh ()에게 전화하거나 대기를 배경 스레드 (궁극적으로 옳은 일)로 이동할 수 있습니다.

다른 팁

스레딩 문제입니다. 별도의 스레드 또는 배경 스레드 에서이 작업을 수행 할 수 있습니다. 사람들이 사용하는 것을 본 한 가지 접근 방식은 Application.Doevents ()를 수행하는 것입니다.

전경 스레드에서 처리를 마치고 릴리스 할 때까지 GUI에 대한 업데이트는 발생할 수 없습니다. 전경 스레드가 GUI를 계속 업데이트 할 수 있도록 백그라운드 스레드에서 복원을 수행해야합니다. 복원 코드를 별도의 방법으로 넣고 사용하는 것을 고려하십시오. ThreadPool.queueUserWorkItem (), 복원 방법을 전달합니다. 이렇게하면 스레드 풀 스레드에서 복원 메소드가 트리거됩니다.

스레드와 알림이 완료되었을 때 더 많은 제어가 필요한 경우 배경 노동자

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top