📄 answerform.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Net;
using System.Threading;
namespace LiveQnA4
{
public partial class AnswerForm : Form
{
DataRow itemRow;
private DataSet ds;
private bool webRequestPending = false;
private delegate void RefreshListDelegate(DataSet ds);
private delegate void EmptyListDelegate();
public AnswerForm(DataRow itemRow)
{
InitializeComponent();
this.itemRow = itemRow;
}
private void AnswerForm_Load(object sender, EventArgs e)
{
UpdateFeed();
timer1.Interval = SettingsForm.RefreshTime * 60 * 1000;
timer1.Enabled = true;
}
private void UpdateFeed()
{
string searchUrl = itemRow["link"] +
"&format=RSS";
webRequestPending = true;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(searchUrl);
IAsyncResult asyncResult = request.BeginGetResponse(new AsyncCallback(EndUpdateFeed), request);
}
public void EndUpdateFeed(IAsyncResult result)
{
HttpWebRequest request = null;
HttpWebResponse response = null;
XmlTextReader xmlRdr = null;
try
{
request = (HttpWebRequest)result.AsyncState;
response = (HttpWebResponse)request.EndGetResponse(result);
xmlRdr = new XmlTextReader(response.GetResponseStream());
ds = new DataSet();
ds.ReadXml(xmlRdr);
response.Close();
xmlRdr.Close();
// check if there are any rows of answers to display
if (ds.Tables.Contains("item"))
{
Invoke(new RefreshListDelegate(RefreshList), ds);
}
else
{
Invoke(new EmptyListDelegate(ShowEmptyList));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (response != null)
response.Close();
if (xmlRdr != null)
xmlRdr.Close();
webRequestPending = false;
}
}
private void RefreshList(DataSet ds)
{
listView1.SuspendLayout();
listView1.Items.Clear();
foreach (DataRow answerRow in ds.Tables["item"].Rows)
{
string[] displayInfo = new string[2];
displayInfo[0] = answerRow["description"].ToString();
displayInfo[1] = answerRow["title"].ToString();
ListViewItem item = new ListViewItem(displayInfo);
item.Tag = answerRow;
listView1.Items.Add(item);
}
listView1.ResumeLayout();
}
private void ShowEmptyList()
{
listView1.SuspendLayout();
listView1.Items.Clear();
string[] displayInfo = new string[2];
displayInfo[0] = "NONE";
displayInfo[1] = String.Empty;
ListViewItem item = new ListViewItem(displayInfo);
item.Tag = null;
listView1.Items.Add(item);
listView1.ResumeLayout();
}
private void timer1_Tick(object sender, EventArgs e)
{
UpdateFeed();
}
private void AnswerForm_Closing(object sender, CancelEventArgs e)
{
timer1.Enabled = false;
// if we have a request pending make sure to cancel it somehow.
while (webRequestPending)
{
Thread.Sleep(1000);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -