2009-04-08 2 views

답변

1

Winform 컨트롤의 BeginInvoke는 스레드를 통해 호출하기 위해 FIFO의 Window 메시지 큐를 사용합니다.

+0

실제로, 항목이 우연히 건너 뛰어 큐를 효과적으로 차단할 수있는 예제를 보았습니다. "방법"을 기억할 수는 없지만 복잡하지는 않습니다. –

+0

대기열의 맨 위에 메시지를 놓을 수 있지만 메시지 처리를 차단하려면 메시지 처리 자체가 차단되어 메시지를 대기열에 넣지 않아야합니다. – Richard

0

기본 폼 (또는 모든 컨트롤)에 대한 핸들이있는 경우 Control.Invoke/Control.BeginInvoke을 사용할 수 있습니다.

당신이 Control 인스턴스를 배부하지 않으려면

, 당신은 (모든 컨트롤이 그것을 할, 또는 발신자 캐스팅을 방지하기 위해 Control을 감싸는 것을 자신의 클래스를 작성합니다) 외부 코드에게 ISynchronizeInvoke 인스턴스를 제공 할 수 있습니다. 그런 다음 호출자는이 메소드를 사용하여 메소드를 수행 할 수 있습니다.

마지막으로 이벤트 사용을 고려하십시오. 실행중인 코드는 UI에서 처리하는 이벤트를 발생시킵니다. 그런 다음 UI는 Control.Invoke을 로컬로 호출하여 데이터를 처리 할 수 ​​있습니다.

+0

감사합니다. ISynchronizeInvoke를 시도해 보겠습니다. ATM에 문제가있는 것은 control.invoke와 관련이 있습니다. http://stackoverflow.com/questions/729359/thread-exception-on-selectednode-nodes0/729377#729377 –

+0

이것이 관련이 있는지 의심 스럽습니다. 하지만 당신은 다른 게시물에 대한 자세한 정보에 대한 항변을 무시했습니다 ... –