Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 11:
Процессы, домены, потоки в C#
Загрузка объектов приложения в домены
Приведем пример размещения отдельных частей одного приложения в разных доменах. При этом домен, который автоматически создается средой исполнения для запущенного приложения, будем называть основным, а дополнительный домен, созданный кодом нашего приложения для размещения объекта, пользовательским. Пользовательским доменам можно назначать осмысленные имена. Имена основным доменам назначает среда исполнения.
using System; using System.Runtime.Remoting; // Для меж_доменного взаимодействия namespace Test { // Объект для размещения в пользовательском домене class SecondClass : MarshalByRefObject { // Поле для хранения текста сообщения private string message; // Конструктор заполняет поле именем текущего домена public SecondClass() { // Читаем имя текущего домена message = AppDomain.CurrentDomain.FriendlyName; } // Сервис доступа к полю public String Message { get { return message; } } } // Весь последующий код будет размещен в основном домене class BaseClass { int i = 0; // Счетчик сообщений печати // Конструктор public BaseClass() { // Выводим имя основного домена Console.WriteLine("{1}) Имя основного домена: {0}", AppDomain.CurrentDomain.FriendlyName, ++i); // Создаем именованный пользовательский домен AppDomain userDomain = AppDomain. CreateDomain("Пользовательский домен"); // Получим имя текущей сборки и полное имя // типа "Test.UserDomain" string assemblyName = System.Reflection.Assembly. GetAssembly(typeof(BaseClass)).GetName().Name; string typeName = typeof(SecondClass).FullName; // Создаем удаленный объект типа "Test.UserDomain", // находящийся в текущей сборке ObjectHandle objHandle = userDomain.CreateInstance (assemblyName, typeName); // Получаем ссылку для работы с удаленным объектом SecondClass obj = (SecondClass)objHandle.Unwrap(); // Проверяем, действительно ли установлен // канал связи Transparent Proxy if (RemotingServices.IsTransparentProxy(obj)) { Console.WriteLine("{0}) Канал связи с удаленным объектом установлен!", ++i); Console.WriteLine("{1}) Имя пользовательского домена:\n\t'{0}'", obj.Message, ++i); } else Console.WriteLine("{0}) Нет связи с другим доменом", ++i); } } // Запуск - тоже в основном домене class Program { static void Main() { // Настройка консоли Console.Title = "Механизм взаимодействия доменов приложения"; Console.ForegroundColor = ConsoleColor.White; Console.CursorVisible = false; Console.WindowWidth = 48; Console.WindowHeight = 5; new BaseClass();// Исполняем Console.ReadLine(); } } }Листинг 11.1 . Механизм взаимодействия доменов приложения