gpt4 book ai didi

c# - 防止多次调用事件方法(锁定)

转载 作者:太空宇宙 更新时间:2023-11-03 14:13:10 27 4
gpt4 key购买 nike

我是 C# 和线程的新手,我有这个问题要解决:

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

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

我的问题是,有时当 DataProcessor 被触发并开始做一些事情但还没有完成时,它又被触发了,我遇到了冲突。

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

最佳答案

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

简化此操作的一个好方法是使用 BlockingCollection .您的线程只需对该集合运行 foreach,这将阻止等待排队的项目。

您也可以在处理程序中取消订阅事件,并在完成处理后重新订阅,但这样会丢失事件。

关于c# - 防止多次调用事件方法(锁定),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7170765/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com