?? main.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.Threading;
using System.Xml;
namespace 個性系列_智能新聞自動采集系統
{
public partial class Main : Form
{
Thread ThreadGetNews;
public Main()
{
InitializeComponent();
}
private void Main_Load(object sender, EventArgs e)
{
BindGrid();
if (IsAutoGet())
{
GetNews();
}
}
bool IsAutoGet()
{
XmlDocument XML = new XmlDocument();
XML.Load("RssNews.xml");
string autoGet = "";
XmlNode Node = XML.SelectSingleNode("RssNews/Config");
if (Node != null)
{
autoGet = Node["IsAutoGet"].InnerText;
if (autoGet == "True")
{
程序啟動就開始獲取ToolStripMenuItem.Checked = true;
return true;
}
}
return false;
}
void SetGetNewsBtn(string Enable)
{
if (Enable == "false")
{
停止獲取新聞ToolStripMenuItem.Enabled = true;
開始獲取新聞ToolStripMenuItem.Enabled = false;
}
else
{
停止獲取新聞ToolStripMenuItem.Enabled = false;
開始獲取新聞ToolStripMenuItem.Enabled = true;
}
}
void GetNews()
{
treeView1.Nodes.Clear();
ThreadGetNews = new Thread(new ThreadStart(BeginGetNews));
ThreadGetNews.Start();
}
void AddTreeNode(TreeNode Node1, TreeNode Node2)
{
Node1.Nodes.Add(Node2);
//Node1.ExpandAll();
}
void SetStateText(string a)
{
txtState.Text = a;
}
void AddRootTreeNode(TreeNode Node1, TreeNode Node2)
{
treeView1.Nodes.Add(Node1);
}
delegate void A(string a);
delegate void B(TreeNode Node1, TreeNode Node2);
void BeginGetNews()
{
object o = new object();
lock (o)
{
try
{
int NewsCount = 0;
int Rsscount = 0;
A detSetGetNewsBtn = new A(SetGetNewsBtn);
A detSetStateText = new A(SetStateText);
B detAddRootTreeNode = new B(AddRootTreeNode);
B detAddTreeNode = new B(AddTreeNode);
this.Invoke(detSetGetNewsBtn, "false");
List<RssModel> rssList = News.GetRssList();
foreach (RssModel rss in rssList)
{
this.Invoke(detSetStateText, "正在獲取:" + rss.NewsName);
Rsscount++;
List<NewsModel> newsList = News.GetNewsList(rss);
TreeNode Node = new TreeNode(rss.NewsName + "(" + newsList.Count.ToString() + "," + rss.MaxNewscount + ")");
this.Invoke(detAddRootTreeNode, Node, null);
int MaxNewsCount = 0;
foreach (NewsModel news in newsList)
{
if (MaxNewsCount >= int.Parse(news.Rss.MaxNewscount))
break;
try
{
TreeNode ChildNode;
this.Invoke(detSetStateText, "正在獲取:" + news.Rss.NewsName + "/" + news.NewsTitle + "(" + news.NewsUrl + ")");
if (News.ExistNews(news))
{
this.Invoke(detSetStateText, news.Rss.NewsName + "/" + news.NewsTitle + "(" + news.NewsUrl + ")已經有了");
ChildNode = new TreeNode(news.NewsTitle + "(已經有了)");
ChildNode.SelectedImageIndex = 1;
ChildNode.ImageIndex = 1;
ChildNode.Tag = news.NewsUrl;
this.Invoke(detAddTreeNode, Node, ChildNode);
//Thread.Sleep(1000);
NewsCount++;
MaxNewsCount++;
continue;
}
NewsModel news1 = News.GetNewsByNewsLink(news);
if (news1.NewsBody != null && news1.NewsBody != "")
{
ChildNode = new TreeNode(news.NewsTitle + "(獲取成功)");
ChildNode.SelectedImageIndex = 1;
ChildNode.ImageIndex = 1;
ChildNode.Tag = news.NewsUrl;
this.Invoke(detAddTreeNode, Node, ChildNode);
News.AddToDatabase(news);
//Thread.Sleep(1000);
NewsCount++;
MaxNewsCount++;
}
else
{
ChildNode = new TreeNode(news.NewsTitle + "(獲取失敗)");
ChildNode.SelectedImageIndex = 1;
ChildNode.ImageIndex = 1;
ChildNode.Tag = news.NewsUrl;
this.Invoke(detAddTreeNode, Node, ChildNode);
//Thread.Sleep(1000);
NewsCount++;
}
}
catch (Exception e)
{
//MessageBox.Show(e.Message);
}
}
this.Invoke(detSetStateText, rss.NewsName + "獲取完畢");
}
this.Invoke(detSetStateText, "全部獲取完畢,共" + Rsscount.ToString() + "個頻道," + NewsCount.ToString() + "篇新聞");
this.Invoke(detSetGetNewsBtn, "true");
}
catch (Exception e)
{
//MessageBox.Show(e.Message);
}
}
}
private void Main_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
void BindGrid()
{
dataGridView1.DataSource = Rss.GetChannel();
dataGridView1.Columns["NewsID"].HeaderText = "站點標識(接口)";
dataGridView1.Columns["NewsName"].HeaderText = "站點名稱";
dataGridView1.Columns["NewsUrl"].HeaderText = "站點Url(只讀)";
dataGridView1.Columns["NewsUrl"].Width = 200;
dataGridView1.Columns["StartTag"].HeaderText = "新聞起始標簽(支持正則表達式)";
dataGridView1.Columns["StartTag"].Width = 200;
dataGridView1.Columns["EndTag"].HeaderText = "新聞結束標簽(支持正則表達式)";
dataGridView1.Columns["EndTag"].Width = 200;
dataGridView1.Columns["ImgStartTag"].HeaderText = "圖片起始標簽(支持正則表達式)";
dataGridView1.Columns["ImgStartTag"].Width = 200;
dataGridView1.Columns["ImgEndTag"].HeaderText = "圖片結束標簽(支持正則表達式)";
dataGridView1.Columns["ImgEndTag"].Width = 200;
dataGridView1.Columns["IsGetNews"].HeaderText = "是否獲取該站點";
dataGridView1.Columns["NewsDescription"].HeaderText = "站點描述";
dataGridView1.Columns["MaxNewscount"].HeaderText = "最大獲取新聞條數";
dataGridView1.Columns["NewsUrl"].ReadOnly = true;
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex < 0 || e.ColumnIndex < 0)
{
return;
}
string CommandName = dataGridView1.Columns[e.ColumnIndex].Name;
switch (CommandName)
{
case "Delete":
{
DataGridViewRow row = dataGridView1.Rows[e.RowIndex];
RssModel rss = new RssModel();
rss.NewsUrl = row.Cells["NewsUrl"].Value.ToString();
Rss.DeleteRssNews(rss);
BindGrid();
break;
}
case "Update":
{
try
{
DataGridViewRow row = dataGridView1.Rows[e.RowIndex];
RssModel rss = new RssModel();
rss.NewsDescription = row.Cells["NewsDescription"].Value.ToString();
rss.EndTag = row.Cells["EndTag"].Value.ToString();
rss.ImgEndTag = row.Cells["ImgEndTag"].Value.ToString();
rss.NewsName = row.Cells["NewsName"].Value.ToString();
rss.StartTag = row.Cells["StartTag"].Value.ToString();
rss.ImgStartTag = row.Cells["ImgStartTag"].Value.ToString();
rss.IsGetNews = row.Cells["IsGetNews"].Value.ToString();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -