防止多个调用事件方法(锁定)

时间:2011-08-24 05:19:39

标签: c# multithreading locking

我对C#和线程很陌生,我有这个问题需要解决:

我有一个处理某些数据的线程,并且不时(必要时)它会触发在启动线程之前设置的事件方法(DataProcessor)。这个主题是专有的dll。所以我不能再影响DataProcessor调用了。

public void DataProcessor(object sender) 
{
//...
//do some stuff which take some time
}

我的问题是,DataProcessor不时被触发并开始做一些事情并且尚未完成,它再次被解雇并且我发生了冲突。

我需要的是,当DataProcessor做一些事情时,所有其他数据都是不必要的,因此必须忽略/跳过所有其他处理其他数据的尝试 - 与处理无关。

1 个答案:

答案 0 :(得分:1)

应该使用事件处理程序来执行非常快速的操作。我处理类似情况的方式是当事件触发时,将一些“待办事项”放入队列中。然后我运行一个连续线程来处理队列中的项目。

简化此操作的一种好方法是使用BlockingCollection。你的线程只在该集合上运行foreach,这将阻止等待排队的项目。

当您进入处理程序时,您也可以取消订阅该事件,并在完成处理后重新订阅,但您将以这种方式丢失事件。