厳密には簡単ではありませんが、それほど難しいことでもありません。あなたがする必要があるのは、STAとしてセットアップされたワーカースレッドをスピンアップし、その上でDispatcherランタイムを起動することです。あなたがそこに座っているワーカーをいったん持っていれば、明らかにこの種の作業のために初期化されていない単体テストスレッドから作業をディスパッチできます。だから、まず、ここでは、あなたのテストのセットアップでディスパッチャスレッドを起動方法は次のとおりです。
今
this.dispatcherThread = new Thread(() =>
{
// This is here just to force the dispatcher infrastructure to be setup on this thread
Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() =>
{
Trace.WriteLine("Dispatcher worker thread started.");
}));
// Run the dispatcher so it starts processing the message loop
Dispatcher.Run();
});
this.dispatcherThread.SetApartmentState(ApartmentState.STA);
this.dispatcherThread.IsBackground = true;
this.dispatcherThread.Start();
、あなたはきれいに私はあなたがお勧めテストクリーンアップ、中にそのスレッドをシャットダウンしたい場合、あなたは、単に次の操作を行います:
Dispatcher.FromThread(this.dispatcherThread).InvokeShutdown();
このように、すべてのインフラストラクチャが邪魔になりません。テストでは、このスレッドで実行する必要があります。
public void MyTestMethod
{
// Kick the test off on the dispatcher worker thread synchronously which will block until the work is competed
Dispatcher.FromThread(this.dispatcherThread).Invoke(new Action(() =>
{
// FromCurrentSynchronizationContext will now resolve to the dispatcher thread here
}));
}
それは働いて、ありがとう! – Alberto