AppDomain и многопоточность - PullRequest
4 голосов
/ 26 июня 2009

По сути, из того, что я понял из того, что мне удалось найти в Интернете, потоки могут проходить между доменами приложений. Теперь я написал следующий код:

    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 ]

8 голосов
/ 26 июня 2009

Вы не можете делиться экземплярами классов напрямую между AppDomain s. Для этого вы должны извлечь класс из MarshalByRefObject и использовать удаленное взаимодействие для доступа к экземпляру из другого AppDomain.

1 голос
/ 26 июня 2009

Объект в .Net может существовать только в одном домене приложений. Он не может существовать одновременно в двух доменах приложений.

Однако вы можете использовать .Net Remoting, чтобы проталкивать прокси объекта .Net одновременно в несколько доменов приложений. Это создаст видимость вашего объекта в нескольких доменах. Я считаю, что это то, что вы ищете.

В Интернете доступно множество учебных пособий. Google для ".Net Remoting Tutorial", и это поможет вам в правильном направлении.

...