내 스레드의 GUI 문제로 인해 짜증이났다. 메인 폼/스레드가 콜백을 사용하지 않고 코드를 실행하는 대신에 일을 처리하기위한 데이터를받을 수 있도록 FIFO를 어떻게 생성합니까?C에서 Winform FIFO #
GUI를 문제의 문제 ->Thread exception on SelectedNode = .Nodes[0]
내 스레드의 GUI 문제로 인해 짜증이났다. 메인 폼/스레드가 콜백을 사용하지 않고 코드를 실행하는 대신에 일을 처리하기위한 데이터를받을 수 있도록 FIFO를 어떻게 생성합니까?C에서 Winform FIFO #
GUI를 문제의 문제 ->Thread exception on SelectedNode = .Nodes[0]
사용 SynchronizationContextPost
/Send
의 UI 스레드에 "전화".
Winform 컨트롤의 BeginInvoke는 스레드를 통해 호출하기 위해 FIFO의 Window 메시지 큐를 사용합니다.
기본 폼 (또는 모든 컨트롤)에 대한 핸들이있는 경우 Control.Invoke
/Control.BeginInvoke
을 사용할 수 있습니다.
당신이 Control
인스턴스를 배부하지 않으려면
Control
을 감싸는 것을 자신의 클래스를 작성합니다) 외부 코드에게
ISynchronizeInvoke
인스턴스를 제공 할 수 있습니다. 그런 다음 호출자는이 메소드를 사용하여 메소드를 수행 할 수 있습니다.
마지막으로 이벤트 사용을 고려하십시오. 실행중인 코드는 UI에서 처리하는 이벤트를 발생시킵니다. 그런 다음 UI는 Control.Invoke
을 로컬로 호출하여 데이터를 처리 할 수 있습니다.
감사합니다. ISynchronizeInvoke를 시도해 보겠습니다. ATM에 문제가있는 것은 control.invoke와 관련이 있습니다. http://stackoverflow.com/questions/729359/thread-exception-on-selectednode-nodes0/729377#729377 –
이것이 관련이 있는지 의심 스럽습니다. 하지만 당신은 다른 게시물에 대한 자세한 정보에 대한 항변을 무시했습니다 ... –
실제로, 항목이 우연히 건너 뛰어 큐를 효과적으로 차단할 수있는 예제를 보았습니다. "방법"을 기억할 수는 없지만 복잡하지는 않습니다. –
대기열의 맨 위에 메시지를 놓을 수 있지만 메시지 처리를 차단하려면 메시지 처리 자체가 차단되어 메시지를 대기열에 넣지 않아야합니다. – Richard