Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 127

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 121 122 123 124 125 126 < 127 > 128 129 130 131 132 133 .. 320 >> Следующая

Отдельный процесс .NET
Домен приложения А
Совместно используемые данные
Поток А
Стек вызовов
TLS
Поток В і
Стек вызовов
TL5
Домен приложения Б
Совместно используемые данные
Рис. 6.38. Процесс может содержать один или несколько доменов приложений. Домен приложений может содержать один или несколько потоков
302 6 Сборки, потоки и домены приложений
Домены приложений программно реализуются при помощи типа System,Арр-Domain. Наиболее важные члены этого типа представлены в табл. 6.2.
Таблица 6.2. Наиболее важные члены AppDomain Член Назначение
CreateDomainQ Статический метод для создания нового домена приложения в текущем
процессе
GetCurrentThreadldO Этот статический метод возвращает идентификатор текущего потока
Unload() Еще один статический метод для выгрузки указанного домена
приложения
BaseDirectory Свойство, возвращающее базовый каталог, используемый распознавателем
для поиска нужных приложению сборок
Createlnstance() Создает экземпляр указанного типа, определенного в указанном файле сборки
ExecuteAssemblyO Запускает на выполнение сборку, имя которой указано в качестве параметра
GetAssemblies() Возвращает список сборсж, загруженных в текущий домен приложения L03d() Загружает сборку в домен приложения
Работаем с доменами приложений
Как мы уже говорили, домен приложения — это дополнительный уровень в .NET между процессом и потоками. Чтобы показать применение доменов приложения на практике, рассмотрим следующий пример:
namespace MyApp:.>oma і п {
using System;
using System.Windows.Forms;
И Это пространство имен требуется для работы с типом Assembly using System.Reflection:
public class MyAppDomain {
public static void PrintAllAssembliesO {
Il Получаен список всех загруженных в текущий домен приложения // сборок
AppDomain ad = AppDomain.CurrentDomain: Assembly[] loadedAssemblies = ad.GetAssemblies(); Console.WritetineC'Here are the assemblies loaded in " + "this
appdomainNn");
Il Теперь выводим полное имя для каждой сборки foreach(Assembly a in loadedAssemblies) {
Consolе.Wr1teLi ne(a.FuI1Name):
}
]
public static Main(string[] args) {
II Производим принудительную загрузку System.Windows.Forms,dl 1
MessageBox.Show("toaded System.Windows. Forms.dl Г);
Пространство имен System/Threading 303
Прежде всего обратите внимание, что мы впервые используем новое пространство имен — System. Reflecti on. Это пространство имен будет подробно рассматриваться в следующей главе, а сейчас нам важно отметить, что в нем определен та п Assembly, который нам нужен для использования в методе Pri ntAH Assemblies О
Наш статический метод PrintAllAssembliesO получает ссылку на текущий домен приложения и выводит на консоль список всех загруженных сборок. Чтобы было интереснее, одну из сборок (System.Windows, Forms.dlL) мы загрузили, намеренно использовав в МйіяО один из определенных в ней типов — Message?cx, Результат работы нашей программы представлен на рис. 6.39.
D:\CSharpBoGk\Labs\thapter 6VMyAppDDrnajin\bin
-і':.- fti'e the assemblies loaded in this д і_нк1<и :л і п nscarlib, Uri>e ion-1 - й. 2411. O, Gulttire=neutral, PiiblicKeyToli ПуАррОиплііі. Uersion=l.0.456.842, Culture ^neutral- PlihlieKe S уз CcrtMU-.dour. . Ferxto , law. ion =1 . И. И 41 1 . И, Cttltupn "neutral, Systen, Ue1-SiOn=I.И.24tl.И, Culture =neutral, PuhlicKuyToben i'n any key to continue F
ГП I 4 'A
Рис. 6.39. Выводим список загруженных в домен приложения сборок
Код приложения MyAppDomai п можно найти в подкаталоге Chapter 6.
Пространство имен System.Th read ing
Пространство имен System.Threading определяет большое число типов, которые используются для создания многопоточных приложений. Помимо типов для работы с конкретным потоком, в этом пространстве имен имеются типы для работы с набором потоков синхронизированным доступом к общим данным,
а также простой (без графического интерфейса) класс Timer. Некоторые наиболее важные типы этого пространства имен представлены в табл. 6.3.
Таблица 6.3. Некоторые типы пространства имен System.Threading Тип Назначение
Interlocked Для синхронизированного доступа к общим данным
Monitor Обеспечивает синхронизацию потоковых объектов при помощи блокировок
и управления ожиданием
Hut© Примитив синхронизации, используемый для синхронизации разных процессов
Thread Представляет поток, работающий в среде выполнения .NET. При помощи этого
типа можно порождать в текущем домене приложения новые потоки
ПРОДОЛЖЄНИЄ ii>
PrintAllAssenbliesO; return 0;
304 Глава 6 • Сборки, потоки и домены приложений
Таблица 6.3 (продолжение)
Тип Назначение
ThreadPool Используется для управления набором взаимосвязанных потоков
Timer Определяет делегат, который будет вызван в указанное время. Операция
ожидания выполняется потоком в пуле потоков
WaitHandle Представляет во время выполнения все объекты синхронизации (которые
позволяют многократное ожидание)
ThreadStart Представляет делегат со ссылкой на метод, который должен быть выполнен
Предыдущая << 1 .. 121 122 123 124 125 126 < 127 > 128 129 130 131 132 133 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100