私はWPFアプリケーションを開発しており、MVVMアプローチに従っています。ユーザーが [Enter] ボタンをクリックしたときに、ログイン画面にビジー インジケーターを表示する必要があります。「Enter」ボタンで、「EnterCommand」という名前の ICommand があり、認証を確認して MainWindow をロードします。
private ICommand _EnterCommand;
public ICommand EnterCommand
{
get
{
return _EnterCommand ?? (_EnterCommand = new DelegateCommand(() =>
{
Thread objThread = new Thread(LoadApplication);
objThread.SetApartmentState(ApartmentState.STA);
objThread.Start();
}));
}
}
IsBusy プロパティは、この showprogress にバインドされています
private bool _ShowProgress = false;
public bool ShowProgress
{
get { return _ShowProgress; }
set
{
if (_ShowProgress != value)
{
_ShowProgress = value;
FirePropertyChanged("ShowProgress");
}
}
}
このコマンドでスレッドを作成し、(bool Property name : ShowProgress) MVVM から IsBusy プロパティを設定しています。
LoadApplication で:
public void LoadApplication()
{
ShowProgress= true;
if (AuthenticateUser)
{
MainWindow objMainWindow = new MainWindow();
objMainWindow.Show();
Application.Current.MainWindow.Close();
}
ShowProgress= false;
}
objMainWindow.Show() は次のエラーをスローしています - 別のスレッドがこのオブジェクトを所有しているため、呼び出しスレッドはこのオブジェクトにアクセスできません。
また、App.xaml で、StartupUri を「ログイン」ウィンドウとして設定しました。
これにより、ユーザーが [Enter] ボタンをクリックするとすぐにビジー インジケーターを表示できますが、mainWindow の表示中に失敗しました。
エラー メッセージは、「別のスレッドが所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません。」
MainWindow (ホーム画面) が起動されていない限り、busyindicator を表示する必要があります。
これを修正するための助けはありますか?