我有一个List对象。每个NewsItem都有2个属性: String Headline {get;组; } DateTime PostedOn {get;组; }
我试图写一个"重播"代码从数据库中检索所有昨天的新闻项,然后在最初发布的确切(或几乎完全)时间发布它们中的每一个,然后将它们显示为WPF应用程序中的实时源。
我知道可以使用System.Threaing.Timer来安排这些帖子。例如。使用PostedOn.Time>找到下一篇文章Datetime.Now.Time,schedule Timer和timer_Elapsed方法引发某种类型的Posted事件。
然而,我想知道是否还有更多现代化的"在C#中这样做的方式,例如with Tasks或Reactive Extensions / Observables。我注意到有Observable.Replay方法,但我似乎无法找到任何例子。不确定它是否适用于这种情况。
非常感谢任何帮助。
答案 0 :(得分:0)
查看Quartz.Net这是一个开源的c#调度程序库。
查看此Quick Start。在公共类HelloJob的最后,您可以将该对象替换为将其作为WPF应用程序中的实时订阅源发布/显示的内容。
答案 1 :(得分:0)
你正在完成一些非常简单的功能......你真的不能自己开发吗?让我们分解一下......首先,你需要一个集合:
private ObservableCollection<NewsItem> newsItems = new ObservableCollection<NewsItem>()
使用当天的商品(按PostedOn
排序)填写您的收藏品......如下所示:
newsItems = new ObservableCollection<NewsItem>(
DataProvider.GetNewsItemsFor(someDate).OrderBy(n => n.PostedOn));
现在你需要一个DispatcherTimer
来提醒你何时需要显示下一个项目...假设你已经正确初始化你的计时器,你可以这样做:
timer.Interval = DateTime.Now.AddDays(-1).Subtract(nextNewsItem.PostedOn);
您可能需要稍微调整一下代码,但基本的想法是,您只是将今天的时间与昨天的时间进行比较,当相关时间到来时,将调用Timer_Tick
事件处理程序然后您可以显示该项目并将timer.Interval
设置为需要显示下一项目的时间量。