Я провел небольшое исследование по обработке многопоточных событий C #, потому что у меня было подозрение, что обработчики событий будут просто вызываться в любом потоке, вызвавшем событие, что оказывается истинным.
Теперь это выглядит какдействительно плохая идея, потому что код, который подписывается на событие в объекте, может вообще не быть разработанным, чтобы быть многопоточным, и реализация этого объекта (который должен быть черным ящиком, нет?), если многопотоковый негласно (как в моем случае) может привести к тому, что код подписчика будет выполняться в нескольких потоках, вызывая всевозможные странные проблемы.
Поэтому мой вопрос заключается в том, можно ли отправить событие обратно в поток, на который изначально была подписанаэто, таким образом, избежать какого-либо неожиданного параллелизма на уровне подписчика?Или, говоря более абстрактно, могу ли я записать текущий поток в определенный момент времени и вставить вызов обработчика событий (или любой произвольный фрагмент кода) в этот поток в более поздний момент времени?
Клинкерэто: я делаю это в DLL, которая не ссылается на WinForms или WPF.Я знаю, что в этих структурах существуют конструкции, позволяющие это сделать (и я сам их использовал), но я хочу сделать это без ссылки на эти библиотеки.
Небольшая справка:
Мой дизайн использует фоновые потоки для работы с объектом, что может привести к изменению его свойств.Я использую INotifyPropertyChanged, чтобы сообщить об изменениях этих свойств наблюдателям.Я использую WPF вне библиотеки для отображения этих объектов в интерфейсах, поэтому INotifyPropertyChanged полезен, потому что он сообщает WPF обновить экран при изменении свойства отображаемого объекта.
Я предполагаю, что WPFобрабатывает многопоточные уведомления об изменениях внутри, поэтому, если бы я придерживался исключительно WPF, вероятно, проблем не было бы.Однако я бы хотел, чтобы кто-нибудь мог подписаться на события изменений и не беспокоиться о том, что они вызываются в фоновых потоках.