Обработчик событий на языке c # - PullRequest
2 голосов
/ 12 октября 2011
class Plane 
{
    public event EventHandler Land;

    protected void OnLand()
    {
        if ( null != Land ) 
        {
            Land( this, null );
        }
    }
}

Лучше всего использовать обработчик событий:

EventHandler temp = Land;
if ( null != temp ) 
{
    temp( this, null );
}

Это действительно необходимо? В каком случае температура может отличаться от Land?

Ответы [ 3 ]

6 голосов
/ 12 октября 2011

В случае многопоточного доступа, я считаю. Если вы не кешируете ссылку, другой поток может обнулить ее после вашей охраны, но до того, как вы запустите.

2 голосов
/ 12 октября 2011

Если у вас есть параллелизм со многими потоками, изменяющими Land.

1 голос
/ 12 октября 2011

Когда между тестом и повышением последний обработчик удаляется из списка другим потоком.

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

См .: C # События и безопасность потоков

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