4

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

4

2 回答 2

8

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

于 2009-06-26T12:47:26.403 回答
1

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

但是,您可以使用 .Net Remoting 一次将 .Net 对象的代理推送到多个 AppDomain 中。这将使您的对象看起来像是在多个域中。我相信这就是您正在寻找的。

网上有很多教程。谷歌搜索“.Net Remoting Tutorial”,这会让你走上正轨。

于 2009-06-26T12:54:46.403 回答