Представьте себе следующий класс:
class A
{
public event EventHandler AnyEvent;
}
Вы создаете экземпляр класса A
и подключаете некоторые обработчики событий.Теперь, если AnyEvent
поднято, я бы не предположил, что обработчики событий выполняются в другом потоке, а не в потоке, в котором я создал объект.Это будет иметь первостепенное значение, если вы создали объект в потоке графического интерфейса, а обработчик событий выполняет операции над элементами графического интерфейса.Это заставило бы меня использовать соответствующие шаблоны вызова.
Это действительно становится злом, если вы используете интерфейсы, определяющие события:
interface B
{
event EventHandler SomeEvent;
}
Теперь одна реализация может вызвать событие из исходного потока,следующий из второго потока.Это может привести к тому, что ваше приложение будет успешно работать с одним из них и завершится неудачей с другой реализацией.
Я думаю, что кодирование всегда должно быть прозрачным - это не так!И если я не создаю другой поток, я не предполагаю, что мои методы выполняются из любого другого потока, кроме моего home .
Есть ли какие-либо аспекты, которые я не делалсчитаете? Любое, что опровергнет мое предположение?