我构建了一些程序集,其中一个是提供一些功能和一些事件。一些关系如下:
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窗口)。
它让我感到困惑,谁可以帮助我呢?
谢谢, 肯特
答案 0 :(得分:0)
显然,您正在跨越应用域边界。所有跨越此类型的类型必须在发送之前序列化,然后在另一个应用程序域中反序列化。因此,跨应用程序域的类型必须是可序列化的。
您可能应该以未发送的形式更改代码。
请注意:net-problem-with-raising-and-handling-events-using-appdomains