WPF
にはCaliburn.Micro
アプリケーションが含まれていますので、新しいウィンドウを表示します。これはすべてのウィンドウでうまく動作しますが、1つでは問題ありません。他のスレッドが所有しているため、呼び出しスレッドはこのオブジェクトにアクセスできません。
呼び出しスレッドは、別のスレッドがこのオブジェクトを所有しているため、このオブジェクトにアクセスできません。
これは私が他に
WindowManager.ShowWindow(new DatabaseCredentialsViewModel(EventAggregator, WindowManager,
SettingsManager));
ウィンドウマネージャを呼び出す方法です、私はまたnew WindowManager().ShowWindow(...);
によって「新しいウィンドウマネージャを作成」してみました。しかし、上記の作業のどれも。他のウィンドウとは何が違うのですか?
新しいウィンドウを表示するには、OnViewLoaded
のバックグラウンドで新しいスレッドを開始しました。最初に新しいスレッドを開始した理由は、デフォルトでGUIスレッドがメインスレッドであるため、新しいスレッドを開始しないと、コードが実行されるまでGUIが適切にロードされないということです等々)。
編集I:私はこの問題を調査して、この時点で問題を引き起こしているウィンドウマネージャではないが、おそらくnew DatabaseCredentialsViewModel
という、完全に新しいウィンドウマネージャ(元のクラスの新しいインスタンス)を作成し、それでも同じエラーが発生します。
編集II:これを試しました。ただし、正確なエラーは引き続き発生します。
Dispatcher.CurrentDispatcher.BeginInvoke((Action) (() =>
{
WindowManager.ShowWindow(new DatabaseCredentialsViewModel(EventAggregator, WindowManager, SettingsManager));
}));
'Dispatcher.CurrentDispatcher'の代わりに' Application.Current.Dispatcher'を使ってみましたか? – Doom5
先日私はまさにこれをやったが、今は(その時あなたの答えを見ていないにもかかわらず)働いている。しかしそれは正しかった。私のコードは、Application.Current.Dispatcherに変更すると素晴らしい動作をします。 –