Запуск потока самоубийства из обработчика событий - PullRequest
0 голосов
/ 17 сентября 2011

Я очень новичок в многопоточности и C #, я должен решить эту проблему: у меня есть обработчик событий, который запускается довольно часто (это должно быть сделано таким образом, потому что вызовы обработчика событий вызываются из DLL) Когда метод-обработчикКогда мне нужно вызвать, мне нужно создать и запустить один поток, который будет выполнять какие-то действия, и его обработка может варьироваться от нескольких миллисекунд до нескольких секунд, когда по окончании своей работы он убивает себя.Когда он закончен, Evenhandler может создать другой поток.Между тем созданный поток запущен, никакие другие потоки не могут быть созданы и запущены из обработчика событий.

Большое спасибо за помощь.

Ответы [ 2 ]

4 голосов
/ 17 сентября 2011

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

.NET 4 облегчает это с помощью BlockingCollection<T> тип.До .NET 4 это, конечно, еще выполнимо, но вам нужно найти стороннюю поточно-ориентированную очередь производителя / потребителя или написать ее самостоятельно.

0 голосов
/ 17 сентября 2011

Потоки, которые убивают себя, представляют проблемы.Вы должны синхронизироваться с основным потоком, когда поток действительно убивает себя.

Мне кажется, что вам будет лучше с одним выделенным потоком, который сделал эту работу.Используйте очередь блокировки и реализуйте шаблон производитель / потребитель.Вместо того, чтобы прерывать поток, когда ему нечего делать, оставьте его без дела, пока не придет больше работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...