我有一个神秘的问题,我无法在我的电脑上重现,但它会在其他电脑上播放。
这是简化剪切,它显示了问题
class SomeViewModel
{
Item _item;
Job _job = new Job();
public SomeViewModel()
{
_job.Progress += (s, e) => App.Current.Dispatcher.Invoke(() => Progress());
}
async void DoSomething()
{
...
SomeItem.SomeProperty = newValue; // this proves SomeItem is not null
_item = SomeItem;
var result = await Task<bool>.Run(() => _job.Do());
_item = null;
...
}
void Progress()
{
if(_item == null) { ... } // sometimes true, why???
...
}
}
class Job
{
public event EventHandler Progress;
public bool Do()
{
...
Progress?.Invoke(this, EventArgs.Empty); // in cycle
...
return true;
}
}
从按钮命令调用 DoSomething
。想法是在字段中存储当前项目并在事件处理程序中访问它。在项目设置为某项内容之前,事件永远不会被称为,在项目设置为null
之后永远不会被称为。
我的问题:事件处理程序中的_item == null
怎么可能?
它将永远不会发生(我的电脑)或每次都发生(其他电脑)。我无法理解错误。有什么想法吗?