我有一個創建這樣一個新的應用程序域的應用程序:信息發送到原來的應用程序域
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