从事件处理程序运行自杀线程

时间:2011-09-17 07:46:02

标签: c# multithreading event-handling thread-safety

我是多线程和c#的新手,我必须解决这个问题: 我有经常被触发的事件处理程序(它必须以这种方式完成,因为事件处理程序调用是从dll调用的) 当调用handler方法时,我需要创建并运行一个可以完成一些操作的线程,并且它的处理可以在几毫秒到几秒之间变化,当它完成它的工作时就会自动杀死它。完成后,evenhandler可以创建另一个线程。同时创建的线程正在运行,不能从eventhandler创建和运行其他线程。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

这一切听起来都很复杂,而且我对你实际上要做的事情没有很好的了解,但听起来用单个额外线程可以更好地处理这个问题。共享的工作项队列。您的事件处理程序只会将另一个工作项添加到队列中,并且该线程将从队列中选择项目并一次处理一个。

.NET 4使BlockingCollection<T>类型变得简单。在.NET 4之前,它当然仍然可行,但您需要找到第三方线程安全的生产者/消费者队列或自己编写一个。

答案 1 :(得分:0)

自杀的线程带来了问题。当线程自行杀死时,你必须与主线程同步。

听起来好像你会用一个完成这项工作的专用线程会更好。使用阻塞队列并实现生产者/消费者模式。而不是在没有任何事情时杀死线程,让它闲置,直到更多的工作到来。