2014-02-25 3 views
1

현재 WPF에서 아래 코드를 사용하고 있습니다. 하지만 지금은 WPF를 사용하지 않고 DLL에서 동일하게 구현해야합니다.C# DLL에서 Dispatcher 객체에 액세스하는 방법은 무엇입니까?

가 이
Dispatcher.CurrentDispatcher.BeginInvoke(new Kepware.ClientAce.OpcDaClient.DaServerMgt.DataChangedEventHandler(DataChanged), DCevHndlrArray); 

사람이 그것을 어떻게 저를 제안 할 수 있습니다 (더 UI가 없습니다)? 귀하의 제안은 높이 평가 될 것입니다.

+0

당신은해야하지, 보장은 없습니다 WPF 앱에서 실행됩니다. 대신 SynchronizationContext.Current를 사용하십시오. 생성자에서 복사하여 나중에 Post() 메서드를 호출 할 수 있습니다. –

답변

0

DLL이 WPF 응용 프로그램 내에서 사용하고 PresentationFramework 어셈블리를 포함하는 경우, 당신은 System.Windows.Application.Current.Dispatcher

알렉스을 사용할 수 shuld

당신의 3 개 가지 주요 구성 요소 참조만큼 아무 문제가 없다
2

WPF 프레임 워크

  • PresentationCore.dll
  • PresentationFramework.dll
  • WindowsBase.dll

Dispatcher 클래스를 사용할 수 있습니다.

그냥 조언 ... Dispatcher.Invoke(..)Application.Current.Dispatcher.Invoke(..)은 작업을 다시 Surface로 Dispatch 할 수있는 두 가지 일반적인 방법입니다. 그러나 Application.Dispatcher을 사용하지 않는 한 UI 요소가 실행중인 것과 동일한 디스패처에서 조치가 실행되는지 확인할 수 없습니다. Multiple Dispatcher를 하나의 AppDomain에서 실행할 수 있거나 DLL이 UI에로드되지 않은 경우 AppDomain을 실행하면 버그가 발생할 수 있습니다.

0

필수 참조 :

PresentationFramework.dll, 그 의존성 (응용 프로그램 개체의 경우) :

System.Xaml.dll 수 WindowsBase.dll 당신의 DLL

관련 문제