调用线程访问错误
本文关键字:错误 访问 线程 调用 | 更新日期: 2023-09-27 18:17:49
我有2个viewModels -一个用于主程序,另一个用于我的用户控件。当我动态创建用户控件时,我启动后台线程:
private void BackgroundWorkerDoWork(object sender, DoWorkEventArgs eventArgs)
{
Dispatcher.CurrentDispatcher.Invoke(()=> CustomControl.ViewModel.InOperation = true);
while (!StopMeasuring)
{
//some action
}
}
InOperation是我的userControl viewModel中的属性:
public virtual bool InOperation
{
get { return _inOperation; }
set
{
if (_inOperation==value) return;
_inOperation = value;
Dispatcher.CurrentDispatcher.Invoke(new Action(() =>
{
InOperationEvent(ControlId);
}));
}
}
和我发送InOperationEvent到我的主viewModel:
public void OnUsercontrolInOperationChanged(int controlId)
{
Dispatcher.CurrentDispatcher.Invoke(() => {
foreach (var userControl in _allUserControls.Where(control => control.Name == _currentUcName))
{
switch (userControl.Name)
{
//switch cases
}
}
});}
和在运行时,在foreach循环在我的主viewModel我得到异常- 调用线程不能访问这个对象,因为一个不同的线程拥有它
谁能指出我错在哪里吗?Dispatcher.CurrentDispatcher
返回当前线程的调度程序。如果你在后台线程上调用这个,你会为那个后台线程获得一个dispatcher。为了封送回UI线程,您需要对UI线程上的Dispatcher进行引用。你可以在主线程上读取Dispatcher.CurrentDispatcher
属性的值,然后将该值传递给后台线程。