Кроме наблюдателя, пример демонстрирует такую архитектурную деталь как приемник событий. Приемником называется объект системы, которому отводится роль подписчика на события, или элемента реагирующего на события. В приемнике (классе Receiver) размещено задание делегата (функция ArrivedHandler).
class Test
{
static void Main()
{
ManagementClass mc = new ManagementClass (@"Win32_Process");
foreach (ManagementObject proc in mc.GetInstances())
Console.WriteLine (proc["Caption"].ToString());
ManagementEventWatcher watcher = new ManagementEventWatcher (new WqlEventQuery(
"Select * from __InstanceCreationEvent within 1 " +
@"where TargetInstance ISA 'Win32_Process'"));
Receiver r = new Receiver();
watcher.EventArrived += new EventArrivedEventHandler (r.ArrivedHandler);
watcher.Start(); // Start watching for events
System.Threading.Thread.Sleep (180000); // wait for 3 minutes
watcher.Stop();
Console.WriteLine ("Done watching for events");
}
}
public class Receiver
{
public void ArrivedHandler (object sender, EventArrivedEventArgs e)
{
Console.WriteLine ("Process started = " +
((ManagementBaseObject)e.NewEvent["TargetInstance"])["Caption"]);
}
}
Запустив это приложение, воспользуйтесь клавишной комбинацией LWin+R. Клавиша LWin — "Левая Windows" расположена слева внизу (с изображением Windows Logo). В диалоге Run (он появится в результате нажатия комбинации) запустите несколько процессов, пути к которым прописаны в переменных окружения системы, например: cmd, notepad, mmc, regedit и т.д. При этом в окне нашего приложения (в конце списка процессов, запущенных системой) будут появляться новые строки. Например:
System Idle Process
System
devenv.exe
// . . . , и т.д.
Process started = mmc.exe
Process started = regedit.exe
Process started = WinRAR.exe
Done watching for events
Через 3 минуты наблюдатель выключится (см. вызов метода Stop) и приложение завершится, но в течение этих трех минут наблюдатель оповещает нас обо всех процессах, которые стартовали в системе.
В этом разделе мы разработаем проект типа Class Library, который позволит производить мониторинг системы и управлять ее параметрами с помощью классов из пространства имен System.Management. Параллельно, мы разработаем Windows-приложение, которое будет пользоваться возможностями классов нашей библиотеки и предоставит пользователю удобный интерфейс для осуществления мониторинга и управления системой. Приложение будет иметь примерно такой вид:
Создайте общий какркас всего решения (solution), для этого:
1. В меню File4New выберите команду Blank solution.
2. В появившемся окне диалога New Project, в окне Project Type раскройте узел дерева под именем Visual Studio Solution. В окне Templates выбор единственный — Blank solution.
3. В окне Name введите имя решения MyWMI.
4. В окне Location задайте местоположение новой папки с файлами решения (solution) и нажмите OK.
Вставьте в пустое рабочее пространство (solution) два проекта (Class Library и Windows Application):
6. В контекстном меню текущего решения выберите команду Add4New Project.
7. В окне диалога выберите тип проекта Visual C# Projects4Class Library, задайте имя Library и убедитесь, что папка проекта попадает внутрь папки решения.
8. Сразу добавьте в решение второй проект. Для этого в контекстном меню текущего решения (будьте внимательны: решения, а не проекта) выберите команду Add4New Project.
9. В окне диалога выберите тип проекта Windows Application, задайте имя Client и убедитесь, что папка проекта попадет внутрь папки решения.
10. Заметьте, что активным является первый проект (Library). Если это не так, то с помощью меню правой кнопки добейтесь, чтобы это было так, дав команду: Set as SturtUp Project.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.