我对C#和线程很陌生,我有这个问题需要解决:
我有一个处理某些数据的线程,并且不时(必要时)它会触发在启动线程之前设置的事件方法(DataProcessor)。这个主题是专有的dll。所以我不能再影响DataProcessor调用了。
public void DataProcessor(object sender)
{
//...
//do some stuff which take some time
}
我的问题是,DataProcessor不时被触发并开始做一些事情并且尚未完成,它再次被解雇并且我发生了冲突。
我需要的是,当DataProcessor做一些事情时,所有其他数据都是不必要的,因此必须忽略/跳过所有其他处理其他数据的尝试 - 与处理无关。
答案 0 :(得分:1)
应该使用事件处理程序来执行非常快速的操作。我处理类似情况的方式是当事件触发时,将一些“待办事项”放入队列中。然后我运行一个连续线程来处理队列中的项目。
简化此操作的一种好方法是使用BlockingCollection。你的线程只在该集合上运行foreach
,这将阻止等待排队的项目。
当您进入处理程序时,您也可以取消订阅该事件,并在完成处理后重新订阅,但您将以这种方式丢失事件。