Объект System.Windows.Forms.Timer не отмечается при загрузке из активированной сборки (плагин) - PullRequest
1 голос
/ 26 января 2011

В настоящее время я работаю над проектом, который загружает сборки (плагины) в основное пространство AppDomain (через Assembly.LoadFile () и класс Activator в Reflection.Как часть API с плагинами, хост-приложение может запросить объект, производный от Control, для отображения в форме хоста.

По сути: «хостинговое приложение» - это приложение WinForms, которое может загружать сборки, содержащие элементы управления.Хостинговое приложение загружает сборки (через Assembly.LoadFile ()), а затем запрашивает элемент управления у каждой сборки.Затем элемент управления отображается (добавляется в контейнер) в форме.

Все выглядит нормально (кнопки, метки, изображения и т. Д.) С элементом управления, и оно становится интерактивным.Однако, если в форме используется таймер (компонент WinForms - НЕ System.Threading.Timer) - он НЕ ставится.Если элемент управления используется непосредственно в хосте (при ссылке на него в качестве зависимости), таймер будет работать как положено.

Кто-нибудь знает о проблемах с WinForms Timer, которые не могут должным образом подключиться к насосу сообщений, если он загружениз сборки?

1 Ответ

1 голос
/ 26 января 2011

Непонятно, что может означать «пространство приложения». Угадайте: вот отличное сообщение в блоге , в котором описаны опасности загрузки элементов управления во вторичном домене приложений. Ключевая часть этого, а затем совет о том, как заставить его работать:

Windows Forms поддерживает только изоляцию окна верхнего уровня через домены приложения. Это не поддерживает родитель-ребенок отношения между доменами. Много люди предположили, что потому что Контроль в конечном итоге происходит от MarshalByRefObject, что он может успешно быть удаленным; это не правда. Определенные интерфейсы на элементе управления может быть удален через домены, но сам API элемента управления не поддерживает Remoting. Когда вы видите исключения заявляя, что объект не может быть удаленный, потому что это не сериализуемо, вы видите, что у кого-то есть попытался привести удаленный прокси к Контроль.

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