我是一个很新的多线程和c#,我必须解决这个问题:我有事件处理程序,这是触发相当频繁(必须这样做,因为事件处理程序调用调用从dll)当处理程序方法被调用时,我需要创建并运行一个线程,它将做一些事情,它的处理可以从几毫秒到几秒钟不等,当完成它的工作时,它会杀死自己。当它完成后,evenhandler可以创建另一个线程。当创建的线程正在运行时,不能从eventandler创建和运行其他线程。
非常感谢您的帮助
这一切听起来相当复杂,我不太清楚您实际上在做什么,但听起来这将更好地处理单个额外的线程和工作项的共享队列。您的事件处理程序只需将另一个工作项添加到队列中,线程将从队列中取出项并一次处理一个。
。NET 4通过BlockingCollection<T>
类型简化了这一点。当然,在。net 4之前,这仍然是可行的,但你需要找到一个第三方线程安全的生产者/消费者队列,或者自己编写一个。
终止自己的线程会出现问题。当主线程结束自己时,你必须与主线程同步。
这听起来好像你会更好与一个专门的线程来做这项工作。使用阻塞队列并实现生产者/消费者模式。与其在无事可做时终止线程,不如让它闲置,直到有更多的工作到达。