Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 11:
Процессы, домены, потоки в C#
Загрузка исполняемых файлов в домены
Рассмотрим пример, в котором родительское приложение из основного домена запускает исполняемые сборки в других отдельных доменах. Пример оформим в виде упражнения с пошаговыми инструкциями.
-
Командой File/New/Project создайте новый проект с именем ConsoleApp в одноименном решении
-
Командой File/Add/New Project добавьте к созданному решению еще 3 новых проекта с именами
- ConsoleApp1
- ConsoleApp2
- ConsoleApp3
После таких действий структура решения в панели Solution Explorer будет выглядеть так
-
Откройте файлы Program.cs для дочерних приложений
- ConsoleApp1
- ConsoleApp2
- 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.