2012-03-21 2 views
0

기본적으로 자체 메시징 큐를 구현하는 응용 프로그램이 있습니다. 사용자가 응용 프로그램과 상호 작용할 때 ActionDispatcher에서 처리 할 .NET 클래스가 아닌 사용자 지정 작업 인 동작을 생성합니다.UI 액세스가 필요한 여러 스레드 처리

ActionDispatcher 클래스에는 CustomAction 객체 스택이 있습니다. 자체 스레드에서 ActionDispatcher를 실행하고 싶지만 Invoke 및 BeginInvoke를 사용하여 기본 UI 스레드와 통신하는 것과 관련된 모든 문제가 있습니다.

ActionDispatcher에서 호출 할 수있는 여러 가지 방법이 있습니다. 각 메서드에는 UI 측에서 대리인이 내가 믿는 다른 스레드와 통신하는 데 사용해야합니다. 더 간단한 방법이 있습니까?

별도의 스레드를 원한 이유는 ActionDispatcher가 서버뿐만 아니라 UI에서 보낸 메시지를 처리하기 때문입니다. 이것은 클라이언트 응용 프로그램이며 많은 작업이 서버에 의해 생성됩니다. UI와 서버 모두에 메시지를 추가하는 자체 대기열이 있다고 생각합니다.

답변

0

정말 응용 프로그램의 아키텍처에 따라 다르지만 짧고 간단한 대답은 : 아니요. UI 스레드가 아닌 경우 Dispather의 Invoke 또는 BeginInvoke 메서드를 사용하여 액세스하거나 실행해야합니다 UI 스레드에서 다시 코드화하십시오.

부수적으로, 이것은 WinForms와는 조금 다릅니다. WinForms 원근법에서 나오는 것처럼 들리므로 WPF Dispatcher를 찾아야 할 수도 있습니다.

한편, 저는 프리즘의 IEventAggregator와 같은 것을 살펴볼 것을 제안합니다. 다른 유사한 구현이있을 것이라고 확신합니다. 프리즘에는 멋진 기능이 하나 있습니다. 이벤트에 가입하고 UI 스레드와 프리즘에 올리라고 말할 수 있습니다. 프리즘은 나머지 작업을 수행합니다.

개인적으로, 나는 EventAggregator 패턴을 사용하는 것이 더 좋다고 생각하는데, 필연적으로 더 간단하다고 확신하지는 않습니다.