我正在开发一个 MvvM - 基于 Light 的应用程序。在这个应用程序中,我启动了一个异步 HttpReqest。然后,当我得到响应时,我启动了一个事件,在这种情况下,我正在广播一条消息以切换到另一个视图。但是当我执行这段代码时,我得到了一个 InvalidOperation 异常:调用线程无法访问这个对象,因为另一个线程拥有它。
这是我的代码:
public class MainLoginViewModel : ViewModelBase
{
readonly LoginRequest _httpRequest = new LoginRequest();
public MainLoginViewModel()
{
_httpRequest.IsValid += IsUserValid;
}
private void ExecuteLoginKeyPressCommand()
{
_httpRequest.BeginCheckIfUserIsValid();
}
private static void IsUserValid(object sender, EventArgs e)
{
var infoView = new MainInfoView();
if ((bool)sender)
{
infoView.Dispatcher.Invoke(DispatcherPriority.Normal,
new Action(
() => Messenger.Default.Send(infoView, Properties.Resources._mainLoginMessangerToken)));
}
}
}
在这个类中,我定义了我的 LoginRequest 类,它检查用户是否有效。该事件正在返回一个布尔值。如果用户有效,我将 Messenger 类中的新视图发送到另一个处理视图的 ViewModel:
public class MainViewModel : ViewModelBase
{
public MainViewModel()
{
SelectedView = new MainLoginView();
Messenger.Default.Register<MainInfoView>(this, Properties.Resources._mainLoginMessangerToken, PasswordChanged);
}
private void PasswordChanged(MainInfoView obj)
{
SelectedView = obj;
}
public UserControl SelectedView
{
get
{
return _selectedViewProperty;
}
set
{
if (_selectedViewProperty == value)
{
return;
}
var oldValue = _selectedViewProperty;
_selectedViewProperty = value;
RaisePropertyChanged(() => SelectedView, oldValue, value, true);
}
}
}
那么我在这里误解了什么吗?有人可以帮我吗?
问候