C#中的事件处理-没有回调

时间:2018-10-27 11:10:22

标签: c# .net events

如果我使用以下代码:

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)一样(如果进行了调用,则对委托的调用)在后台进行,程序立即继续执行吗?

1 个答案:

答案 0 :(得分:3)

SomeEvent?.Invoke(this, new SomeEventArgs());

与以下基本相同:

if(SomeEvent != null)
{
    SomeEvent(this, new SomeEventArgs());
}

因此,答案是,不会,SomeEvent不会在其他线程或其他任何线程中运行,它将以与调用简单函数相同的方式调用事件。请记住,与会代表的顺序是未知的(如果已经注册了多个)。