如果我使用以下代码:
public List<int> _SomeList = new List<int>();
public event EventHandler<SomeEventArgs> SomeEvent;
public int StartEvent
{
get
{
return _SomeList[_SomeList.Count - 1];
}
set
{
lock (_SomeList)
{
_SomeList.Add(value);
SomeEvent?.Invoke(this, new SomeEventArgs());
}
}
}
是否确保仅在完成所有委托调用之后,它才能恢复到原先的位置(发生调用的位置?),还是像覆盖(overran)一样(如果进行了调用),则在背景和程序立即继续吗?
最佳答案
SomeEvent?.Invoke(this, new SomeEventArgs());
基本上与:
if(SomeEvent != null)
{
SomeEvent(this, new SomeEventArgs());
}
因此,答案是,不,
SomeEvent
不会在其他线程或其他任何线程中运行,它将以与调用简单函数相同的方式调用事件。请记住,与会代表的顺序是未知的(如果已注册多个)。