1

MainViewModelは購読していEventます:

var uc = new MyUserControl();
uc.ViewModel.ValueTypeChangedEvent += OnValueTypeChanged;
Control05 = uc;

StartMeasuring2();

BackgroundWorkerは:

private myUserControl Control05 { get; set; }

private void StartMeasuring2()
{
    _backgroundWorkerP2.RunWorkerCompleted += backgroundWorkerCompleted;
    _backgroundWorkerP2.DoWork += BackgroundWorkerDoWork;

    if (_backgroundWorkerP2.IsBusy)
        _backgroundWorkerP2.CancelAsync();
     else
     {    
         _backgroundWorkerP2.RunWorkerAsync();
     }
}

private void BackgroundWorkerDoWork(object sender, DoWorkEventArgs eventArgs)
{
    Thread.Sleep(3000);

    while (!StopMeasuringP2)
    {
        const int measurementStatus = 0;
        var random = new Random();
        double measurementValue = random.Next(1, 9);
        var dateTime = DateTime.Now;
        Control05.ViewModel.UserControl1.ViewModel.LastDayMesswerte(dateTime,measurementValue, measurementStatus);
        Thread.Sleep(7000);
     }
}

編集:

ユーザーコントロールの LastDayMesswerte メソッドは次のとおりViewModelです。

public virtual void LastDayMesswerte(DateTime time, double measurementValue, int measurementStatus)
{
     if(measurementValue>=0 && measurementValue<3) 
          ValueType = "Alarm";

     if(measurementValue>=3 && measurementValue<6)
          ValueType = "Warning";

     else
     {
         ValueType = "Normal";
     }
}

ValueTypeの財産です:

public virtual string ValueType
{
    get { return _valueType; }

    set
    {
        if (_valueType == value) return;
        _valueType = value;
        OnValueTypeChangedEvent(ControlId, MasterId);
    }
}

OnValueTypeChangedEvent:

protected virtual void OnValueTypeChangedEvent(int controlId, int masterId)
{
    ValueTypeChangedEventHandler handler;

    lock (_valueTypeChangedEventLock)
    {
        handler = _valueTypeChangedEvent;
    }

    if (handler != null) handler(controlId, masterId);
 }

LastDayMesswerteしたがって、 myを呼び出す前にBackgroundWorker, _valueTypeChangedEventは NULL ではありません。LastDayMesswerteメソッドの最初の if ステートメントにブレークポイントを設定しました_valueTypeChangedEventが、既に NULL になっています。なぜそれが起こっているのですか?

4

2 に答える 2