Events 控制台和WPF应用程序之间有什么区别吗?(跨AppDomain的事件)

Events 控制台和WPF应用程序之间有什么区别吗?(跨AppDomain的事件),events,appdomain,Events,Appdomain,我构建了一些程序集,其中之一是提供一些功能和一些事件。一些关系如下: 程序集A是一个接口外观组件,它声明所有服务接口 程序集B是程序集A(包括事件)声明的所有接口的一个“模拟”实现 程序集C是程序集A(包括事件)声明的所有接口的一个“真实”实现 B将负责在第二个AppDomain中创建C并在C中调用方法,如下所示: B组件内部: void MethodA() { ... AppDomain proxyAppDomain = AppDomain.CreateDomain(..) ProxyGe

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

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

这让我很困惑,谁能帮我

谢谢,
Kent

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

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


请看:

但为什么控制台应用程序可以很好地工作?它们都没有标记为“可序列化”.控制台中的调用方类型是什么?WPF应用程序和控制台之间完全相同。我指的是它们调用汇编BHmmmm的代码,我应该收回我的评论,控制台和WPF应用程序之间存在一些差异:从控制台,调用方式是“静态的”,从WPF,调用方式不是静态的。这导致了不同的结果。