AppDomain和线程

时间:2009-06-26 12:41:13

标签: c# appdomain

基本上,根据我对小网的了解,我设法在互联网上搜索,线程可以在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?这可能吗?我想要实现的是在两个域之间共享一个类的实例。

2 个答案:

答案 0 :(得分:8)

您无法在AppDomain之间直接共享类的实例。为此,您应该从MarshalByRefObject派生类,并使用远程处理从另一个AppDomain访问该实例。

答案 1 :(得分:1)

.Net中的对象只能存在于一个AppDomain中。它不可能同时存在于2个AppDomain中。

但是,您可以使用.Net Remoting将.Net对象的代理同时推送到多个AppDomain中。这将使您的对象具有多个域的外观。我相信这就是你要找的东西。

网上有很多教程。 Google推出“.Net Remoting Tutorial”,这将使您走上正轨。