Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 11:

Процессы, домены, потоки в C#

Загрузка исполняемых файлов в домены

Рассмотрим пример, в котором родительское приложение из основного домена запускает исполняемые сборки в других отдельных доменах. Пример оформим в виде упражнения с пошаговыми инструкциями.

  • Командой File/New/Project создайте новый проект с именем ConsoleApp в одноименном решении

  • Командой File/Add/New Project добавьте к созданному решению еще 3 новых проекта с именами
    1. ConsoleApp1
    2. ConsoleApp2
    3. ConsoleApp3

После таких действий структура решения в панели Solution Explorer будет выглядеть так


  • Откройте файлы Program.cs для дочерних приложений
    1. ConsoleApp1
    2. ConsoleApp2
    3. ConsoleApp3

и поместите в функцию Main() каждого из них одинаковый код, выводящий на консоль имя текущего домена

using System;
using System.Collections.Generic;
using System.Text;
    
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
        Console.Title = "Загрузка исполняемых файлов в домены";
    
        Console.WriteLine("Приложение из домена {0}; ID={1}",
        AppDomain.CurrentDomain.FriendlyName,
        AppDomain.CurrentDomain.Id);
        }
    }
}
Листинг 11.2 . Код функции Main() в файлах Program.cs дочерних приложений
  • Выполните команду Build/Build Solution, чтобы откомпилировать дочерние сборки
  • В панели Solution Explorer через контекстное меню для проекта ConsoleApp добавьте к нему исполнимые файлы из дочерних проектов командой Add/Existing Item

  • Установите для каждого из этих файлов свойство Copy to Output Directory в значение Copy always (копировать всегда), чтобы оболочка поместила их в один каталог с родительской исполнимой сборкой ConsoleApp.exe

  • Откройте файл Program.cs проекта ConsoleApp и заполните его следующим кодом
using System;
using System.Collections.Generic;
using System.Text;
    
namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {    
            // Настройка консольного окна вывода 
            Console.Title = "Загрузка исполняемых 
		файлов в домены";
            Console.ForegroundColor = ConsoleColor.White;
            Console.CursorVisible = false;
            Console.WindowWidth = 42;
            Console.WindowHeight = 5;
    
            Console.WriteLine("Приложение из домена {0}; 
			ID={1}",
                AppDomain.CurrentDomain.FriendlyName,
                AppDomain.CurrentDomain.Id);
    
            for (int i = 1; i <= 3; i++)
            {
                string name = "ConsoleApp" + i.ToString();
    
                // Создаем именованный дочерний домен
                AppDomain secondDomain = AppDomain.CreateDomain(name);
    
                // Запускаем в него приложение
                secondDomain.ExecuteAssembly(name + ".exe");
            }
    
            Console.ReadLine();
        }
    }
}
Листинг 11.3 . Код родительского приложения ConsoleApp
  • В панели Solution Explorer щелкните правой кнопкой мыши на узле родительского проекта ConsoleApp, командой Properties вызовите окно свойств и настройте флажки вкладки Debug в соответствии с рисунком

  • В панели Solution Explorer щелкните правой кнопкой мыши на узле родительского проекта ConsoleApp и сделайте его стартовым командой Set as StartUp Project
  • Запустите приложение, в результате чего получится такой результат

Обратите внимание, что имя основного домена совпадает с именем родительской сборки, а имена остальным доменам мы задаем произвольно при создании домена. Свойство FriendlyName содержит удобное имя домена для нас, программистов, а среда исполнения CRL оперирует с идентификатором ID.

Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?

Денис Пашков
Денис Пашков
Россия
Татьяна Ковалюк
Татьяна Ковалюк
Украина, Киев, Киевский политехнический институт, 1974