0

メイン プログラム用とユーザー コントロール用の 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ループで例外が発生します-別のスレッドが所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません

誰かが私が間違っている場所を指摘できますか?

事前にt​​hnx

4

1 に答える 1