Обработка событий в C # - без обратных вызовов - PullRequest
0 голосов
/ 27 октября 2018

Если я использую следующий код:

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());
        }
    }
}

Удостоверился ли он, что только после того, как все вызовы делегата будут завершены, он возобновит работу в том месте, где он был (где происходит Invoke?), Или это так?как overran, например, если Invoke сделан, вызовы для делегатов выполняются в фоновом режиме, и программа немедленно продолжается?

1 Ответ

0 голосов
/ 27 октября 2018
SomeEvent?.Invoke(this, new SomeEventArgs());

в основном совпадает с:

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

Итак, ответ: нет, SomeEvent не будет работать в другом потоке или чем-то еще, он вызовет событие втак же, как если бы вы вызывали простую функцию.Помните, что порядок делегатов будет неизвестен (если зарегистрировано более одного).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...