Если Вы пишите многопоточное приложение, то всегда стоит задумываться о потоко-безопасности (thread safe). Сегодня затронем важную тему про то, как правильно возбуждать событие (event raise), доступ к которому осуществляется в нескольких потоках.
class SomeClass
{
// Доступ к данному событию происходит
// в нескольких потоках.
public event EventHandler SomeEvent;
}
Стандартный, потоко-безопасный (thread safe) шаблон вызова события выглядит следующим образом:
// Потоко-безопасный вызов.
public void OnSomeEventThreadSafe(EventArgs args)
{
// Очень важно, сделать копию события:
EventHandler handler = SomeEvent;
// И далее работать только с ней:
if (handler != null)
{
handler(this, args);
}
}