2012-03-25 3 views
1

실행할 때 richtextbox를 업데이트하는 방법이 있습니다. GUI를 차단하지 않고이 메서드를 몇 번 호출해야합니다. 호출이 끝나고 richtextbox가 채워지면 사용자에게 몇 가지 정보를 표시하는 흐름을 차단해야합니다 (메소드에 대한 다음 호출이 시작되지 않아야 함). MessageBox.Show()를 사용하여이 작업을 수행했습니다.흐름을 차단하지만 GUI를 응답하는 방법

여기에 또 다른 문제가 나타나는데, 주어진 시간에 프로그램을 중단 할 수 있어야하지만 모달 메시지 상자에서이를 허용하지 않습니다. 어쩌면 다른 양식을 구해서 메시지 상자를 시뮬레이트하라고 말할 것입니다.하지만 모달 상자를 교체 할 경우에도 여전히 흐름을 차단해야합니다.

+1

당신이 무슨 뜻인지 명확히하십시오. "흐름을 막는다"라고 할 때 당신은 무엇을 의미합니까? –

+0

나는 그 방법을 10 번이나 불러야 만한다. 첫 번째 호출 후에 두 번째 호출은 내가 말할 때까지 시작해서는 안됩니다. MessageBox는 그 일을 핵심적으로 수행했지만, MessageBox는 클릭을 중단시키지 않습니다. –

+0

이것이 멀티 스레딩 질문입니까? – Spencer

답변

1

예, 이것은 멀티 스레딩 문제입니다. 당신이 이것을 달성 할 수있는 많은 방법이 있습니다. 다음은 멀티 스레딩의 개념에 대한 설명입니다. What is multi-threading?

또한, 여기에 내가 좋아하는 튜토리얼은 멀티 스레딩에있다 : albahari.com

스레드가 자신의 스택을 가지고 독립적으로 작동합니다.

Thread _thread = new Thread(() => { MessageBox.Show("Hello world!", "Spawned in a different thread"); }); 

_thread.Start(); 

가 다른 스레드에서하여 RichTextBox를 호출하려면 그것을 호출하여 텍스트 상자에 텍스트를 추가 양식의 내부의 방법을 만드는 것입니다 할 수있는 한 가지 방법 : 다음은 스레드를 생성하는 방법의 한 예입니다. 여기

public void AddText(string Text) 
{ 
    if (this.textBox1.InvokeRequired) 
    { 
     SetTextCallback d = new SetTextCallback(AddText); // Delegate 
     this.Invoke(d, new object[] { text }); 
    } 
    else { this.textBox1.AppendText(text); } 
} 

당신이 뭘하려는 건지에 대한 MSDN 참조입니다 : 여기에 그것을 수행하는 방법의 예입니다

http://msdn.microsoft.com/en-us/library/ms171728.aspx

+0

버전 별 링크가 아니라면 MSDN 기사에 대한 버전 별 링크를 게시하지 마십시오. –

관련 문제