Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 157 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 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. Ввожу код на сайте, пишет:

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

 

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