0

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

  • 程序集 A 是一个接口外观组件,它声明了所有服务接口。
  • 程序集 B 是声明程序集 A 的所有接口的一种“模拟”实现(包括事件)</li>
  • 程序集 C 是声明程序集 A 的所有接口的一个“真实”实现(包括事件)</li>

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 ... 未标记为可序列化”(SampleForm.Window1 是 WPF 主窗口)。

这让我很困惑,谁能帮我解决这个问题?

谢谢,肯特

4

1 回答 1

0

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

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

看:net-problem-with-raising-and-handling-events-using-appdomains

于 2009-09-18T07:05:05.153 回答