2012-04-04 3 views
1

나는 메시지가 점진적으로 나타나고 몇 초 후에 다시 사라질 UserControl이있다. 이 컨트롤은 backgroundWorker를 사용합니다. 괜찮아. 하지만이 같은 메시지를 표시하기위한 담당하는 방법에 대한 과부하를 추가해야합니다 : 이제UI 컨트롤을 기다리는 가장 좋은 방법은 무엇입니까?

ShowMessage(string message, bool waitToHide) { .. } 

, 나는 위의 방법이 최선의 방법은 호출 스레드 (UI 스레드)를 만들기 위해 무엇을 알고 기다릴 필요 .


나는 좀 흩어져있는 것들에 많은 통합 범위를 중단해야하며, 내부에있는 BackgroundWorker가 완료되는 호출 범위를 알리기 위해 이벤트를 인상했지만,이 방법 때문에 주요 응용 프로그램에서 자주 사용되어왔다.

{ 
    // before code snippet.. 
    messageDisplayer1.ShowMessage("test", true); 
    // after code snippet.. 
} 

로 전환됩니다

{ 
    // before.. 
    messageDisplayer1.ShowMessage("test", true); 
} 

void messageDisplayer1_Done() 
{ 
    // after.. 
} 

답변

3

당신이 .NET 3.5 또는 비동기 CTP없이 .NET 4를 고수해야하는 경우, 당신이 코드를 분할 피할 수있을 것이라고 생각하지 않습니다 (코드를 DoEvents과 함께 쓰지 않으려는 경우는 제외). 한편

async extensions (.NET 4 버전에 대한 어느 CTP는 .NET 4.5에 포함)이 같은 것을 할 수 있도록 :

{ 
    // before code snippet.. 
    await messageDisplayer1.ShowMessage("test", true); 
    // after code snippet.. 
} 

그런 다음 컴파일러를 자동으로 풋 "코드 조각 후"를 별도의 코드 블록 (연속)으로 옮기십시오.이 코드는 ShowMessage가 완료를 알리는 즉시 실행됩니다. 그 동안 컨트롤은 Windows 메시지 루프로 돌아가고 프로그램의 UI는 응답합니다.

관련 문제