C# 基于时间的自定义事件

标签 c# events delegates timer eventargs

我有一个每秒运行一次的函数 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/

相关文章:

c# - 使用 EF 模型从字符串字段中存储和检索枚举的无缝方式

c# - 如何使用 .NET 运行时序列化识别放置在独立存储中的对象的版本?

c++ - 如何通知我窗口已激活?

c++ - 线程退出事件 - C++

ios - customRenderedBannerViewDelegate 实现

c# - WPF ListView : Attaching a double-click (on an item) event

c# - LINQ 并检查 !=null

java - java,android中的自定义事件? fireEvent 有什么作用?

ios - 从委托(delegate)调用时 UIView.animateWithDuration 不起作用?

ios - Objective C 的 iPhone 开发中的 "delegate"是什么?