我有一个创建这样一个新的应用程序域的应用程序:信息发送到原来的应用程序域
private static AppDomain domain = null;
private static void LoadAndLaunchAppDomain(string assemblyFile, string typeName)
{
AppDomainSetup setup = new AppDomainSetup()
{
ApplicationBase = AppDomain.CurrentDomain.BaseDirectory,
ShadowCopyFiles = "true"
};
domain = AppDomain.CreateDomain("ClientKernel", null, setup);
domain.UnhandledException += new UnhandledExceptionEventHandler(domain_UnhandledException);
ClientKernelLauncher launcher = (ClientKernelLauncher)domain.CreateInstanceFromAndUnwrap(assemblyFile, typeName);
launcher.Launch();
}
static void domain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
// handler
}
在某些时候会抛出异常和流量达到处理程序中。我真正想要的是在发生这种情况时重新创建域。我注意到,处理程序实际上是在“ClientKernel”应用程序域中运行的,而不是创建它的原始域。
如何能够回传到原始域并告诉它再次调用LoadAndLaunchAppDomain()
方法?
如果您从两种方法中删除`static`,您的代码是否仍然有效?如果是这样,它是否执行正确的`AppDomain`(因为原来的对象是在原来的`AppDomain`中创建的)?请注意,如果回调函数允许使用实例方法,那么您可能仍然需要使用对象`Serializable` /`MarshalByRefObject`来使其工作。 – 2010-12-23 10:58:58
我无法删除它。我正在使用静态类。 – 2010-12-23 13:09:21