我正在开发一个 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 属性。
在加载应用程序中:
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(即主屏幕)未启动,我就必须显示 busyindicator。
有什么帮助可以纠正这个问题吗?