AppDomain 和线程
Posted
技术标签:
【中文标题】AppDomain 和线程【英文标题】:AppDomain and threading 【发布时间】:2009-06-26 12:41:12 【问题描述】:基本上,根据我在互联网上搜索到的少量信息,线程可以在 AppDomain 之间传递。现在,我编写了以下代码:
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
?这可能吗?我想要实现的是在两个域之间共享一个类的实例。
【问题讨论】:
【参考方案1】:您不能直接在AppDomain
s 之间共享类的实例。为此,您应该从MarshalByRefObject
派生类,并使用远程处理从另一个AppDomain
访问实例。
【讨论】:
没有比 MSDN 更好的了:msdn.microsoft.com/en-us/library/kwdt6w2k(VS.71).aspx 此论坛帖子包含相关代码示例:social.msdn.microsoft.com/Forums/en-US/netfxremoting/thread/…【参考方案2】:.Net 中的一个对象只能存在于一个 AppDomain 中。它不可能同时存在于 2 个 AppDomain 中。
但是,您可以使用 .Net Remoting 一次将 .Net 对象的代理推送到多个 AppDomain 中。这将使您的对象看起来像是在多个域中。我相信这就是您正在寻找的。p>
网上有很多教程。谷歌搜索“.Net Remoting Tutorial”,这会让你走上正轨。
http://www.beansoftware.com/NET-Tutorials/NET-Remoting-Tutorial.aspx http://msdn.microsoft.com/en-us/library/72x4h507(VS.80).aspx【讨论】:
以上是关于AppDomain 和线程的主要内容,如果未能解决你的问题,请参考以下文章