C#创建函数队列
发布时间:2020-12-16 00:03:45 所属栏目:百科 来源:网络整理
导读:我写了一个名为QueueManager的类: class QueueManager{ Queue functionsQueue; public bool IsEmpty { get { if (functionsQueue.Count == 0) return true; else return false; } } public QueueManager() { functionsQueue = new Queue(); } public bool C
我写了一个名为QueueManager的类:
class QueueManager { Queue functionsQueue; public bool IsEmpty { get { if (functionsQueue.Count == 0) return true; else return false; } } public QueueManager() { functionsQueue = new Queue(); } public bool Contains(Action action) { if (functionsQueue.Contains(action)) return true; else return false; } public Action Pop() { return functionsQueue.Dequeue() as Action; } public void Add(Action function) { functionsQueue.Enqueue(function); } public void Add(Func<CacheObject,Boolean> function) { functionsQueue.Enqueue(function); } 当我创建这个类的实例并调用Add方法时,它适用于没有参数的函数,例如: 解决方法
因为使用functionQueue.Add(Method2(classObject)),您可以对调用的结果进行排队,而不是调用本身.
要使用参数排队方法,您应该将Add prototype更改为接受参数(并将它们与委托一起存储).作为替代方案,您可以使用lambdas: functionQueue.Add(() => Method2(classObject)); (那么你的Add的第二次重载是没用的,你总是可以在一个Action中排队,你给出了闭包内的所有参数). 更新这种类型的队列的一个例子是WinForms内部,从主线程以外的其他线程调度方法是通过方法队列完成的(查看Control.MarshaledInvoke的反汇编).跳过同步和上下文它保留了System.Collections.Queue,其中每个条目都是ThreadMethodEntry(用于保存所需数据的结构). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |