メイン プログラム用とユーザー コントロール用の 2 つのビューモデルがあります。ユーザー コントロールを動的に作成するときは、バックグラウンド スレッドを開始します。
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
}
}
});}
実行時に、メインのviewModelのforeachループで例外が発生します-別のスレッドが所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません
誰かが私が間違っている場所を指摘できますか?
事前にthnx