特定时间的新闻/消息重播

时间:2014-04-04 13:43:37

标签: c# wpf multithreading

我有一个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方法,但我似乎无法找到任何例子。不确定它是否适用于这种情况。

非常感谢任何帮助。

2 个答案:

答案 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设置为需要显示下一项目的时间量。

相关问题