我们就以 IT168 的RSS 2.0文件格式作为参考来进行程序演示。
创建RSS阅读器的第一步我就是要获取远程RSS聚合内容,一般都是一个以.xml为扩展名的文件。由于获取远程数据比较耗时,为了不让程序失去响应我们继续利用BackgroundWorker异步获取远程数据,代码如下:
private void button1_Click(object sender, EventArgs e)
{
hasError = false;
textBox1.Enabled = listBox1.Enabled = button1.Enabled = false;
backgroundWorker1.RunWorkerAsync(textBox1.Text);
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string rsslink = e.Argument.ToString();
DataSet ds = new DataSet();
try
{
ds.ReadXml(rsslink);
rssData = ds.Tables[2];
}
catch
{
hasError = true;
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (!hasError)
{
listBox1.Items.Clear();
for (int i = 0; i < rssData.Rows.Count; i++)
{
listBox1.Items.Add(i);
}
}
else
{
listBox1.Items.Clear();
listBox1.Items.Add("error");
}
listBox1.Enabled = true;
textBox1.Enabled = true;
button1.Enabled = true;
}
{
hasError = false;
textBox1.Enabled = listBox1.Enabled = button1.Enabled = false;
backgroundWorker1.RunWorkerAsync(textBox1.Text);
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string rsslink = e.Argument.ToString();
DataSet ds = new DataSet();
try
{
ds.ReadXml(rsslink);
rssData = ds.Tables[2];
}
catch
{
hasError = true;
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (!hasError)
{
listBox1.Items.Clear();
for (int i = 0; i < rssData.Rows.Count; i++)
{
listBox1.Items.Add(i);
}
}
else
{
listBox1.Items.Clear();
listBox1.Items.Add("error");
}
listBox1.Enabled = true;
textBox1.Enabled = true;
button1.Enabled = true;
}