2013-05-11 2 views
3

Допустим, у меня есть 2 потока - поток A и поток B. Я регистрирую событие в потоке A и вывожу его из потока B. В какой поток будет выполняться событие?Новичок, как C# Threading обрабатывает события, поднятые в другом потоке

Есть ли какой-либо особый сценарий, когда вышеуказанное не применимо?

Также, как сделать класс потокобезопасным без использования каких-либо замков.

Заранее спасибо

ответ

4

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

Также как сделать классную резьбу безопасной без использования каких-либо замков.

Мы не почти достаточно информации, чтобы ответить на этот вопрос, и это было бы в другом вопросе идеально. Но прежде чем задать этот отдельный вопрос, вы должны действительно спросить себя, что вы подразумеваете под «потокобезопасным» - это может означать много разных вещей для разных людей. См. Eric Lippert's blog post on the topic для получения дополнительной информации.

(В частности, если вы думаете о событиях, рассмотреть возможность того, что один поток выписывает или отписывается от события , пока он поднимается - что вы должны произойти?)

+0

Спасибо Джон. Итак, для первой части вопроса - независимо от того, какой поток регистрирует событие - вызывающий поток - это поток, который будет обрабатывать выполнение. – Alag20

+0

@ Alag20: Да, если вы не предпримете шаги, чтобы сделать что-то другое. В принципе, для вас нет ничего автоматизированного. –

+0

Что касается второго вопроса - это общий вопрос - что нужно сделать для обеспечения безопасности любого класса. Это может быть переменные, события, подписчики и т. Д. – Alag20

Смежные вопросы