|
Прошел курс. Получил код 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 .
Механизм взаимодействия доменов приложения
