2014-04-04 2 views
1

나는 List 개체를 가지고 있습니다. 각 NewsItem에는 2 개의 속성이 있습니다. String Headline {get; 세트; } DateTime PostedOn {get; 세트; }특정 시간에 뉴스/메시지 재생

나는 DB에서 어제의 뉴스 항목을 모두 검색 한 다음 원래의 정확한 (또는 거의 정확한) 시간에 각 항목을 게시 한 다음 해당 항목을 다음과 같이 표시하는 "재생"코드를 작성하려고합니다. WPF 앱의 라이브 피드.

이러한 게시물을 예약하려면 System.Threaing.Timer를 사용할 수 있음을 알고 있습니다. 예 : PostedOn.Time> Datetime.Now.Time, schedule Timer 및 timer_Elapsed 메소드를 사용하여 다음 게시물을 찾으십시오. 일종의 게시 이벤트가 발생합니다.

그러나 C#에서이를 수행하는 "현대적인"방법이 있는지 궁금합니다. 작업 또는 Reactive Extensions/Observables. Observable.Replay 메서드가 있음을 알았지 만 어떤 예제도 찾을 수없는 것 같습니다. 이 경우에도 적용 할 수 있는지 확실하지 않습니다.

도움을 주시면 대단히 감사하겠습니다.

+0

답변이 도움이 되었습니까? –

답변

0

오픈 소스 C# 스케줄러 라이브러리 인 Quartz.Net을 확인하십시오.

체크 아웃 Quick Start. 끝 부분에서 HelloJob을 사용하면 해당 객체를 WPF 응용 프로그램의 라이브 피드로 게시/표시 할 수있는 객체로 대체 할 수 있습니다.

0

몇 가지 매우 간단한 기능을 수행하고 있습니다. 직접 개발할 수 있습니까? 당신은 지금

newsItems = new ObservableCollection<NewsItem>(
    DataProvider.GetNewsItemsFor(someDate).OrderBy(n => n.PostedOn)); 

이 같은

private ObservableCollection<NewsItem> newsItems = new ObservableCollection<NewsItem>() 

이 (PostedOn으로 정렬) 하루의 항목 컬렉션을 채 웁니다 ... 뭔가 : 현실을 파괴하자 ... 첫째, 당신은 컬렉션을 필요 당신이 제대로 타이머를 초기화 한 가정 ... 다음 항목이 표시 될 필요가있을 때 당신을 경고하는 DispatcherTimer이 필요합니다, 당신이 할 수 있습니다 :

timer.Interval = DateTime.Now.AddDays(-1).Subtract(nextNewsItem.PostedOn); 

당신 마일 약간 위의 코드를 조정할 필요가 있지만 기본 아이디어는 오늘 시간을 어제 시간과 비교하고 관련 시간이 돌아 오면 Timer_Tick 이벤트 핸들러가 호출되고 항목을 표시 할 수 있으며 timer.Interval을 다음 항목이 표시되어야 할 때까지 설정하십시오.

관련 문제