要件に従って、新しい UI スレッドで WPF ウィンドウを開く必要があります。
次のコードを使用して、メイン UI スレッドから新しい UI スレッドでウィンドウを開きます。
Thread winthread = new Thread(new ThreadStart(() =>
{
SynchronizationContext.SetSynchronizationContext(
new DispatcherSynchronizationContext(
Dispatcher.CurrentDispatcher));
Window windowObj = new Window();
Grid gridObj = new Grid();
MyUserControl ctrl = new MyUserControl();
gridObj.Children.Add(ctrl);
windowObj.Content = gridObj;
windowObj.Show();
System.Windows.Threading.Dispatcher.Run();
}));
winthread.IsBackground = true;
winthread.SetApartmentState(ApartmentState.STA);
winthread.Start();
MyUserControl
上記のコードが実行されると、ウィンドウはコンテンツとして表示されます。マウスのダブルクリックイベントでユーザーコントロールを反転させるようなアニメーションを行っています。
それをダブルクリックすると、アプリケーションは次の例外をスローし始めます。
別のスレッドがこのオブジェクトを所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません。
オンラインでSystem.Windows.Threading.Dispatcher.Run()
。
誰でもこの問題の解決策を提案できますか?