さくっとですが、以下のような動きをするRSSリーダーもどきを作ってみました。
ソースコードは以下からダウンロードできます。
OkazukiRssReader.zip
とりあえずMVVMパターンとかいう作るのがめんどくさいのは置いといて、素直にイベントハンドラに処理を書いています。
肝になるのは、以下のコードかな?
var ns = XNamespace.Get("http://purl.org/rss/1.0/"); var rssUrl = textBox1.Text; var req = HttpWebRequest.Create(rssUrl); Observable.FromAsyncPattern<object>( req.BeginGetResponse, req.EndGetResponse)() .OfType<HttpWebResponse>() .Select(res => { var doc = XDocument.Load(res.GetResponseStream()); return doc.Root.Descendants(ns + "item"); }) .SelectMany(items => items) .Select(element => new RssInfo { Title = element.Element(ns + "title").Value, Url = element.Element(ns + "link").Value }) .ObserveOnDispatcher() .Subscribe(rss => listBox1.Items.Add(rss), ex => { MessageBox.Show(ex.Message); }, () => { });
Reactive Extensionを使って非同期処理だけどさくっと書いてます。
レスポンスを取得してXDocumentにしてitemタグだけ抽出したあとにRssInfo型(独自定義)に変換して、UIスレッドでListBoxに追加してます。
何かエラーがあったら画面に出すようにもしています。(動画で最初にボタンを押したときのような動きをする)
適当に作るぶんには割合簡単にできます。