基本上,根据我对小网的了解,我设法在互联网上搜索,线程可以在AppDomains之间传递。现在,我编写了以下代码:
const string ChildAppDomain = "BlahBlah";
static void Main()
{
if (AppDomain.CurrentDomain.FriendlyName != ChildAppDomain)
{
bool done = false;
while (!done)
{
AppDomain mainApp = AppDomain.CreateDomain(ChildAppDomain, null, AppDomain.CurrentDomain.SetupInformation);
try
{
mainApp.ExecuteAssembly(Path.GetFileName(Application.ExecutablePath));
}
catch (Exception ex)
{
// [snip]
}
AppDomain.Unload(mainApp);
}
}
else
{
// [snip] Rest of the program goes here
}
}
这很好用,一切都在点击...主线程进入我的程序的新版本并开始在主应用程序体中运行。我的问题是,如何让它回到父母AppDomain
?这可能吗?我想要实现的是在两个域之间共享一个类的实例。
答案 0 :(得分:8)
您无法在AppDomain
之间直接共享类的实例。为此,您应该从MarshalByRefObject
派生类,并使用远程处理从另一个AppDomain
访问该实例。
答案 1 :(得分:1)
.Net中的对象只能存在于一个AppDomain中。它不可能同时存在于2个AppDomain中。
但是,您可以使用.Net Remoting将.Net对象的代理同时推送到多个AppDomain中。这将使您的对象具有多个域的外观。我相信这就是你要找的东西。
网上有很多教程。 Google推出“.Net Remoting Tutorial”,这将使您走上正轨。