gpt4 book ai didi

c# - 匿名委托(delegate)可以在事件被触发后取消订阅吗?

转载 作者:IT王子 更新时间:2023-10-29 04:52:49 25 4
gpt4 key购买 nike

我想知道“最佳实践”是什么,要求事件处理程序在触发一次后取消订阅。

对于上下文,这是我的情况。用户已登录,并处于处理工作项的就绪状态。他们收到一个工作项,对其进行处理,然后再次准备就绪。此时,他们可能想说他们无法处理更多工作项目,但无论如何都会向他们发送一个。我希望能够做的是,一旦该操作成为可能,就允许用户“排队”“我不可用”。

public event SomeHandler StateChanged = delegate {};

public void QueueNotAvailable()
{
StateChanged += (s,e) => {
if (e.CanGoNotAvailable) {
someObject.NotAvailable();
StateChanged -= {thishandler};
}
}
}

就我而言,如果一个单独的线程碰巧触发了事件并且这个特定的处理程序运行了两次,这不是问题。非常接近地请求相同的功能是可以接受的。我只是不希望它在每次允许操作时触发。

最佳答案

您可以在订阅事件之前保存委托(delegate)实例:

public void QueueNotAvailable() 
{
SomeHandler handler = null;
handler = (s,e) {
// ...
StateChanged -= handler;
};
StateChanged += handler;
}

我相信这应该做到...我必须将初始 handler = null 放在那里,否则你会得到“使用未分配的局部变量”编译错误,但我认为它实际上是良性的。

关于c# - 匿名委托(delegate)可以在事件被触发后取消订阅吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3082143/

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