如果我使用以下代码:

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不会在其他线程或其他任何线程中运行,它将以与调用简单函数相同的方式调用事件。请记住,与会代表的顺序是未知的(如果已注册多个)。

10-07 12:42