Многозадачность на основе потоков чаще всего организуется при программировании на С#. Но там, где это уместно, можно организовать и многозадачность на основе процессов. В этом случае вместо запуска другого потока в одной и той же программе одна программа начинает выполнение другой. При программировании на C# это делается с помощью класса
Process,определенного в пространстве именSystem. Diagnostics.В заключение этой главы вкратце будут рассмотрены особенности запуска и управления другим процессом.Простейший способ запустить другой процесс — воспользоваться методом
Start , определенным в классеProcess.Ниже приведена одна из самых простых форм этого метода:public static Process Start(string
где
Когда созданный процесс завершается, следует вызвать метод
Close , чтобы освободить память, выделенную для этого процесса. Ниже приведена форма объявления методаClose .public void Close
Процесс может быть прерван двумя способами. Если процесс является приложением Windows с графическим пользовательским интерфейсом, то для прерывания такого процесса вызывается метод
CloseMainWindow , форма которого приведена ниже.public bool CloseMainWindow
Этот метод посылает процессу сообщение, предписывающее ему остановиться. Он возвращает логическое значение
true,если сообщение получено, и логическое значениеfalse,если приложение не имеет графического пользовательского интерфейса или главного окна. Следует, однако, иметь в виду, что методCloseMainWindow служит только для запроса остановки процесса. Если приложение проигнорирует такой запрос, то оно не будет прервано как процесс.Для безусловного прерывания процесса следует вызвать метод
Kill , как показано ниже.public void Kill
Но методом
Kill следует пользоваться аккуратно, так как он приводит к неконтролируемому прерыванию процесса. Любые несохраненные данные, связанные с прерываемым процессом, будут, скорее всего, потеряны.Для того чтобы организовать ожидание завершения процесса, можно воспользоваться методом
WaitForExit . Ниже приведены две его формы.public void WaitForExit
public bool WaitForExit(int
В первой форме ожидание продолжается до тех пор, пока процесс не завершится, а во второй форме — только в течение указанного количества