Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как реализованы события - это отдеьные нитки? 
V
    Опции темы
semibug
Дата 18.9.2010, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Запускаю калькулятор
Код

System.Diagnostics.Process  externalProg = new System.Diagnostics.Process();
externalProg.StartInfo.FileName = "calc.exe";
externalProg.EnableRaisingEvents = true;
externalProg.Exited += new EventHandler(prog_Exit);
externalProg.Start();

private static void prog_Exit(object sender, EventArgs e)
{
    MessageBox.Show("The program has been closed");
}


После запуска выполняю какие-то другие действия, условно бесконечный цикл.
Вопрос: по завершении работы калькулятора будет создан новый поток для выполнения prog_Exit?

PM   Вверх
Kaerus
Дата 18.9.2010, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


WPF'er
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 3.9.2010

Репутация: нет
Всего: 1



В этом конкретном случае событие Process.Exited вызывается в другом потоке (взятом из системного пула потоков)
Цитата
When SynchronizingObject is null, methods handling the Exited event are called on a thread from the system thread pool. For more information on system thread pools, see ThreadPool.


А обычно новый поток не создается, к примеру события на форме выполняются все в одном потоке

Это сообщение отредактировал(а) Kaerus - 18.9.2010, 16:20
PM MAIL ICQ   Вверх
semibug
Дата 18.9.2010, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Т.е. в обработчике события завершения необходимо обеспечить синхронизацию при доступе к данным?
Например в основном потоке идет заполнение массива строк, а в обработчике выбирается последний элемент, не может быть ситуации, когда массив был в промежуточном состоянии в момент обращения в событии завершения?

PM   Вверх
Kaerus
Дата 18.9.2010, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


WPF'er
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 3.9.2010

Репутация: нет
Всего: 1



Опять так в этом конкретном случае - ДА
PM MAIL ICQ   Вверх
semibug
Дата 18.9.2010, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Kaerus, ок, спасибо
И смежный вопрос, если запустить процесс, с помощью System.Diagnostics.Process, а затем закончить свое приложение, что произойдет с запущенным процессом (он получает сообщение на закрытие/убивается/еще_что-то) ?

Это сообщение отредактировал(а) semibug - 18.9.2010, 21:41
PM   Вверх
Kaerus
Дата 19.9.2010, 01:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


WPF'er
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 3.9.2010

Репутация: нет
Всего: 1



С помощью этого кода можно получить сообщение о закрытие родителя (проверил работает)
Код

var pc = new PerformanceCounter("Process", "Creating Process ID", Process.GetCurrentProcess().ProcessName);
Process parent = Process.GetProcessById((int)pc.NextValue());

parent.EnableRaisingEvents = true;
parent.Exited += (s, e) => Console.WriteLine("Родительское приложение закрылось");

Console.WriteLine("Press any key to exit ...");
Console.ReadKey();

Идея взята отсюда

Это сообщение отредактировал(а) Kaerus - 19.9.2010, 01:43
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0441 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.