Есть ли разница между консолью и приложением WPF? (Событие пересекает AppDomain) - PullRequest
0 голосов
/ 18 сентября 2009

Я собрал несколько сборок, одна из которых - предоставить некоторые функции и некоторые события. некоторые отношения, как показано ниже:

  • Сборка A - это один компонент фасада интерфейса, объявляющий все сервисные интерфейсы.
  • Сборка B - это одна «пробная» реализация всех интерфейсов, объявленных Сборкой A (включаем событие)
  • Сборка C является одной "Реальной" реализацией всех интерфейсов, объявленных Сборкой A (включаем событие)

И B будет отвечать за создание C во втором AppDomain и вызывать методы на C, как показано ниже: Внутренняя сборка B:

void MethodA()
{
...
AppDomain proxyAppDomain = AppDomain.CreateDomain(..)
ProxyGenerator proxyGenerator = (ProxyGenerator)proxyAppDomain.CreateInstanceAndUnwrap(...)
proxyGenerator.UpdateProgressEvent += OnUpdatePregress(..);
proxyGenerator.MethodA();
}

Кроме того, приложение вызывающей стороны будет взаимодействовать с сборкой B, а не напрямую с C.

Теперь, если приложение вызывающего абонента имеет консольный тип, все работает хорошо, но если приложение вызывающего абонента является WPF-типом, оно завершилось неудачно и сообщило, что «SampleForm.Window1 в ... не помечено как Serializable» (SampleForm.Window1 является главным WPF окно).

Это смутило меня, кто может мне помочь в этом?

Спасибо, Кент

1 Ответ

0 голосов
/ 18 сентября 2009

Видимо, вы пересекаете границы домена приложения. Все типы, которые пересекают это, должны быть сериализованы перед отправкой, а затем десериализованы в другом домене приложения. Поэтому типы, которые пересекают домены приложения, должны быть сериализуемыми.

Вам, вероятно, следует изменить код таким образом, чтобы форма не отправлялась крестиком.

Посмотрите на: net-проблема-с-повышением-и-обработкой-событий-использования-приложений-доменов

...