我有一个每秒运行一次的函数 OnCreate()
。 OnCreate
根据当前时间(当前秒)调用其他函数。但是,不必在 OnCreate
中单独编写每个函数,我希望能够将函数组合在一起,即在 OnCreate
中的 10 秒标记处,我想调用一个函数 CreateFiveX
从现在开始创建一个新的 X,并在每个新的秒继续这样做,持续 5 秒。然后在第 20 秒时,我希望 OnCreate
再次调用相同的函数。
我想使用事件和委托(delegate)来解决这个问题。我在想,在 OnCreate
开始时,我想触发一个事件,该事件需要当前时间并将其发送给所有订阅者,如果一个匹配(即他们应该触发的时间与当前时间匹配)他们解雇并从订阅列表中删除。
问题是,经过太多时间我仍然无法弄清楚如何做到这一点,为了让它变得更加困难,我想将额外的参数传递给 OnCreate
调用的函数。任何帮助都会很好,谢谢。
最佳答案
也许您正在尝试 reinvent the reactive wheel ?
确保您安装并引用了 Reactive Extensions,并且这些命名空间在范围内:
System.Reactive
System.Reactive.Linq
然后您可以使用(作为示例)将以下组合器连接在一起:
Observable.Interval(timespan)
每隔timespan
创建事件
Observable.Take(number)
将那些(或其他事件)限制为特定的number
Observable.Timer()
在特定时间或时间偏移量(从现在或 future /过去时间开始)创建单个事件Observable.Do(action)
和Observable.Subscribe(action)
执行副作用或其他基于流的操作类型Observable.Repeat(number)
重复上述次数之一Observable.Generate()
从状态生成可观察序列
然后是许多其他人,包括那些到 create observables from enumerables 的人或来自 event patterns 之类的东西, 和 many many more .
如果您有具体示例,我们可以向您展示如何使用 Rx 完成它。您也可以浏览the relevant section of StackOverflow .
关于C# 基于时间的自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10543533/