Console和WPF应用程序之间有什么区别吗? (事件跨AppDomain)

时间:2009-09-18 06:09:37

标签: events appdomain

我构建了一些程序集,其中一个是提供一些功能和一些事件。一些关系如下:

  • 程序集A是一个接口外观组件,它声明了所有服务接口。
  • 程序集B是声明为程序集A(包含事件)
  • 的所有接口的一个“模拟”实现
  • 程序集C是声明为程序集A(包含事件)
  • 的所有接口的一个“实际”实现

B将负责在第二个AppDomain中创建C并在C中调用方法,如下所示: B组装内部:

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

并且,调用者应用程序将与程序集B交互,而不是直接与C交互。

现在,如果调用者应用程序是控制台类型,一切都运行良好,但如果调用者应用程序是WPF类型,则失败并报告“SampleForm.Window1 in ...未标记为Serializable”(SampleForm.Window1是WPF main窗口)。

它让我感到困惑,谁可以帮助我呢?

谢谢, 肯特

1 个答案:

答案 0 :(得分:0)

显然,您正在跨越应用域边界。所有跨越此类型的类型必须在发送之前序列化,然后在另一个应用程序域中反序列化。因此,跨应用程序域的类型必须是可序列化的。

您可能应该以未发送的形式更改代码。

请注意:net-problem-with-raising-and-handling-events-using-appdomains