2011-05-16 5 views
-1

서식있는 텍스트 상자에 텍스트를 추가하는 스레드가 여러 개 있습니다. Invoke()를 사용하면 주 UI 스레드와 작업자 스레드간에 교착 상태가 발생하기 쉽습니다. BeginInvoke()를 사용하면 원하지 않는 비동기 UI 업데이트를받을 수 있습니다. 텍스트를 즉시 텍스트 상자에 표시하고 나중에 확인할 수없는 단계가 필요하지 않습니다.InvokeRequired 패턴에서 동기 UI 업데이트를 얻는 방법?

작업을 어떻게 수행합니까?

감사합니다.

+0

내 이전 답변을 오해하고있는 것 같습니다. – SLaks

답변

3

UI 스레드를 건드리지 않고도 UI 스레드에서 마술처럼 실행할 수는 없습니다.
Invoke으로 전화를 걸려면 UI 스레드가 백그라운드 스레드를 기다리지 않게해야합니다.

그러나 대신 BeginInvoke으로 전화해야합니다.
BeginInvokeInvoke보다 적습니다. 유일한 차이점은 Invoke은 UI 스레드가 대리인을 실행할 기회를 가질 때까지 호출 스레드를 강제로 대기시키는 것입니다.

백그라운드 스레드가 UI 스레드가 대리자를 실행할 때까지 대기해야하는 경우 (예 : 값을 반환하는 경우) Invoke으로 전화 할 것입니다.
정상적인 경우 항상 BeginInvoke으로 전화해야합니다. UI 스레드가 자유롭게 될 때까지 배경 스레드를 대기 상태로 만들지 않는 것이 일반적입니다.

+0

고맙습니다 SLaks. 2 일 동안 실을 꿰기에 고투하고 난 후에 나는 물건이 어떻게 일하는지에 관해 대략적으로 이해한다. – Charlie