[英]Would the following pattern of unsubscribing your self from an event via closure cause any problems?
考虑您希望为一个且仅一个通知订阅事件的情况。 第一次通知到达后,您取消订阅所有未来事件。 以下模式会出现任何内存问题吗? 它可以工作,但我不确定自引用闭包是否可以使内存中的内容长于预期。
public class Entity
{
public event EventHandler NotifyEvent;
}
// And then, elsewhere, for a listen-once handler, we might do this:
Entity entity = new Entity();
Action<object, EventArgs> listener = null;
listener = (sender, args) =>
{
// do something interesting
// unsubscribe, so we only get 1 event notification
entity.NotifyEvent -= new EventHandler(listener);
};
entity.NotifyEvent += new EventHandler(listener);
请注意,您必须声明'listener'并指定一个值(null)。 否则编译器会抱怨'使用未分配的局部变量listener
'
这种模式没有错。 这是我和许多其他人用于为事件处理程序分配和删除lambda表达式的模式。
虽然我认为一般模式很好,但我不会通过Action<object, EventArgs>
。 我用的是:
EventHandler listener = null;
listener = (sender, args) =>
{
// do something interesting
// unsubscribe, so we only get 1 event notification
entity.NotifyEvent -= listener;
};
entity.NotifyEvent += listener;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.