如果我使用以下代码:
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)一样(如果进行了调用,则对委托的调用)在后台进行,程序立即继续执行吗?
答案 0 :(得分:3)
SomeEvent?.Invoke(this, new SomeEventArgs());
与以下基本相同:
if(SomeEvent != null)
{
SomeEvent(this, new SomeEventArgs());
}
因此,答案是,不会,SomeEvent
不会在其他线程或其他任何线程中运行,它将以与调用简单函数相同的方式调用事件。请记住,与会代表的顺序是未知的(如果已经注册了多个)。