2013-02-25 3 views
1

제목이 상호 배타적 인 사운드이며, 이것은 아마도 끔찍한 해킹 일 것입니다.하지만 어쨌든 묻습니다.UI가 차단 된 동안 진행 상황을 사용자에게 알립니다.

상태 표시 줄 레이블을 "로드 중 ..."으로 설정하고 데이터베이스에서 데이터를 동기식으로로드하는 경우 (최대 1-2 분이 소요될 수 있음) 단일 스레드 VB.NET 응용 프로그램이 있습니다. 데이터가로드되는 동안 사용자에게 AJAX 유형의 애니메이션을 표시 할 수있는 방법이 있습니까? 물론 올바른 방법은 별도의 스레드/BackgroundWorker 데이터 액세스 및 UI 별도로 관리 할 수 ​​있지만 데이터 액세스 모델을 변경할 수 없습니다 및 "임시 수정"요청했습니다.

는 다음 순간에 내 아이디어 중 일부입니다 : 그것은 어떻게 든 창을 우회, 다시 그리기있어 강제로 다른 스레드에서

  1. 업데이트 라벨 (및 해당 단일 레이블) 메시지 펌프 (아마 불가능)

    형성
  2. 다른 프로세스를 백그라운드로 유지하고 주 응용 프로그램에서 "show"메시지를 보냅니다. 응용 프로그램 앞에 표시되며 기본 응용 프로그램에서 "숨김"메시지가 수신 될 때까지 애니메이션을 보여줍니다. 아마 내려 그것을 제안 투표 (그리고 솔직히 나는 사람들을 비난하지 않는다) 것이다

+0

데이터베이스 호출을 다른 스레드로 이식 할 수 없지만 다른 스레드로 양식 다시 그리기를 이식 할 수는 있습니다. 다른 스레드 옵션은 나에게 가장 이해가가는 것 같습니다. – christopher

+0

@chris 죄송합니다, 너무 빠르게 입력하십시오. 데이터베이스 호출은 다양한 클래스와 폼에서 액세스 할 수 있으며 호출을 차단하려고 할 때마다 각 호출자를 다시 프로그래밍해야하므로 포팅 할 수 없습니다. 앞으로는 가능할지라도 현재로서는 불가능합니다. 그렇다면 컨트롤을 소유하고있는 스레드가 차단되어있는 동안 다른 스레드에서 컨트롤을 업데이트하고 다시 그릴 수 있습니까? 어떻게 가능합니까? 모든 코드 샘플? –

+0

BackgroundWorker는 데이터 액세스를 변경해야합니까? 나는 당신이 그 _try_ 먼저해야한다고 생각합니다. –

답변

1

(사용자가 여전히 볼 거리 기본 응용 프로그램 그러나 "애니메이션"양식에서 전환 문제)하지만이 같은 소리 DoEvents에 대한 직업.

나는 일반적으로 제안하지 않지만 해킹을 찾고 있습니다.

+0

예, 그게 제가 생각한 세 번째 생각 이었지만 데이터베이스 호출이 실행되는 동안 사용자가 양식의 컨트롤을 조작하지 않아야합니다. 나는 데이터 액세스 모델 변경을 강요 할 것이다. 이 임시 수정은 사용자 경험을 "향상"하기위한 것이지만 때때로 차단 된 UI를 보는 것보다 실제로 (동기화 가능한 프로세스, 재진입 버그 등) 어려움을 겪을 것이라고 생각합니다. –

+0

커서를 모래 시계로 설정하는 것과 함께 DoEvents를 사용할 수 있습니다. 모든 단추 클릭에서 커서가 모래 시계인지 확인하고 아무 것도하지 않고 이벤트를 종료하는지 확인하십시오. –

+0

+1. 상황을 고려할 때, 나는 실제로 당신의 답을 upvoted. – Neolisk

관련 문제