/// <summary>
/// 设置采集情况记录的委托
/// </summary>
/// <param name="str"></param>
delegate void SetNote(string str);
private void SetTextNote(string strNote)
{
this.txtNode.Text = strNote;
this.txtNode.SelectionStart = strNote.Length-1;
this.txtNode.ScrollToCaret();
System.Threading.Thread.Sleep(5);
} /// <summary>
/// 设置源代码的委托
/// </summary>
/// <param name="str"></param>
delegate void SetCode(string str);
private void SetCodeText(string strCode)
{
this.txtCode.Text = strCode;
} /// <summary>
/// 设置获取的新闻标题委托
/// </summary>
/// <param name="table"></param>
delegate void SetQA();
private void SetQACatalogues()
{
dgvQACatalogue.DataSource = _tbQACatalogueList;
dgvQACatalogue.Refresh();
System.Threading.Thread.Sleep(5);
} /// <summary>
/// 设置按钮状态的委托
/// </summary>
delegate void ButtonStatus(); /// <summary>
/// 采集完目录
/// </summary>
private void SetFinishCatalogueButtonStatus()
{
this.btnGatherCatalogue.Enabled = true;
this.btnGatherQA.Enabled = this.dgvQACatalogue.Rows.Count > 0;
btnStop.Enabled = false;
_isStart = false;
try
{
_threadGetQA.Abort();
_threadGetQA = null;
}
catch (Exception)
{ _threadGetQA = null;
} this.Width--; if (_autoGatherConfig != null && _autoGatherConfig.IsAuto) // 如果是自动采集
{
btnGatherQA_Click(null, null); // 采集问答
}
} ///<summary>
/// 采集目录
/// </summary>
private void GatherCatalogue()
{
object obj = new object();
lock (obj)
{
SetCode setCode = new SetCode(SetCodeText);
SetQA setQA = new SetQA(SetQACatalogues);
SetNote setNote = new SetNote(SetTextNote);
ButtonStatus buttonStatus = new ButtonStatus(SetFinishCatalogueButtonStatus);
_sbMessage = new StringBuilder();
_listQA = new List<DAS_QA.Model.DAS_GatherQA>(); _sbMessage.Append("开始采集目录......\r\n\r\n"); this.Invoke(setNote, _sbMessage.ToString()); string strHTML = ""; // 站点源代码
List<string> listQAUrlAndTitle = null; // 问答路径和标题列表
string[] QAUrlAndTitle = null; // 问答路径和标题
DAS_QA.Model.DAS_GatherQA gatherQA = null; // 问答信息
int webSiteIndex = 0; // 处理的第几个站点
DAS_QA.Model.DAS_WebsiteConfig webSite = null; //当前处理的站点
DataRow row = null; // 采集的新闻信息行
List<string> listUrl = null; // 站点列表网址集合
for (webSiteIndex = 0; webSiteIndex < _listCheckWebsite.Count && _isStart ; webSiteIndex++)
{
webSite = _listCheckWebsite[webSiteIndex];
listUrl = new List<string>();
_sbMessage.Append("正在请求站点" + webSite.Website + " " + webSite.WebsiteUrl + "\r\n");
this.Invoke(setNote, _sbMessage.ToString()); listUrl.Add(webSite.WebsiteUrl); if (webSite.AutoListRule != "" && webSite.AutoListRule.ToLower() != "http://")
{ for (int strat = webSite.StartNum; strat <= webSite.EndNum; strat += webSite.Distance)
{
listUrl.Add(webSite.AutoListRule.ToLower().Replace("#var#", strat.ToString()));
}
} for (int urlIndex = 0; urlIndex < listUrl.Count && _isStart ; urlIndex++)
{
strHTML = Framework.HTMLHelper.GetHTMLByUrl(listUrl[urlIndex],webSite.WebsiteEncoding);
if (strHTML == null || strHTML == "")
{
_sbMessage.Append("请求页面" + listUrl[urlIndex] + "时出错!没有找到此站点!\r\n\r\n "); }
else
{
_sbMessage.Append("已成功获取页面" + listUrl[urlIndex] + "的源代码!\r\n\r\n开始分析页面" + listUrl[urlIndex] + "的问答列表区域......\r\n");
this.Invoke(setNote, _sbMessage.ToString()); this.Invoke(setCode, strHTML);
strHTML = Framework.HTMLHelper.GetHtmlContent(strHTML, webSite.ListAreaRule);
if (strHTML == null || strHTML == "")
{
_sbMessage.Append("没有找到页面" + listUrl[urlIndex] + "的问答列表区域! \r\n\r\n ");
this.Invoke(setNote, _sbMessage.ToString());
}
else
{ _sbMessage.Append("已成功获取页面" + listUrl[urlIndex] + "的问答列表区域!\r\n \r\n开始分析页面" + listUrl[urlIndex] + "的问答列表区域......\r\n\r\n");
this.Invoke(setNote, _sbMessage.ToString());
listQAUrlAndTitle = Framework.HTMLHelper.GetHtmlContentList(strHTML, webSite.ListRule); if (listQAUrlAndTitle == null || listQAUrlAndTitle.Count == 0)
{
_sbMessage.Append("没有找到页面" + listUrl[urlIndex] + "的问答列表区域的具体问答! \r\n\r\n ");
this.Invoke(setNote, _sbMessage.ToString());
}
else
{ _sbMessage.Append("已成功获取页面" + listUrl[urlIndex] + "的" + listQAUrlAndTitle.Count.ToString() + "篇问答!\r\n\r\n开始分析页面" + listUrl[urlIndex] + "的问答路径......\r\n\r\n");
this.Invoke(setNote, _sbMessage.ToString()); for (int i = 0; i < listQAUrlAndTitle.Count && _isStart; i++)
{ QAUrlAndTitle = Framework.HTMLHelper.GetUrlAndTitle(listQAUrlAndTitle[i], webSite.ListRule);
} }
}
}
}
if (webSiteIndex == _listCheckWebsite.Count - 1)
{
_sbMessage.Append("\r\n\r\n\r\n所有站点已处理完毕!\r\n");
}
else
{
_sbMessage.Append("\r\n\r\n等待处理下一个站点......\r\n\r\n"); } this.Invoke(setNote, _sbMessage.ToString()); } this.BeginInvoke(buttonStatus);
} }以上是代码,在调试模式下能正常运行,直接运行exe文件时,处理16条数据后,窗体无响应。
急需! 先谢谢各位高手了!!
/// 设置采集情况记录的委托
/// </summary>
/// <param name="str"></param>
delegate void SetNote(string str);
private void SetTextNote(string strNote)
{
this.txtNode.Text = strNote;
this.txtNode.SelectionStart = strNote.Length-1;
this.txtNode.ScrollToCaret();
System.Threading.Thread.Sleep(5);
} /// <summary>
/// 设置源代码的委托
/// </summary>
/// <param name="str"></param>
delegate void SetCode(string str);
private void SetCodeText(string strCode)
{
this.txtCode.Text = strCode;
} /// <summary>
/// 设置获取的新闻标题委托
/// </summary>
/// <param name="table"></param>
delegate void SetQA();
private void SetQACatalogues()
{
dgvQACatalogue.DataSource = _tbQACatalogueList;
dgvQACatalogue.Refresh();
System.Threading.Thread.Sleep(5);
} /// <summary>
/// 设置按钮状态的委托
/// </summary>
delegate void ButtonStatus(); /// <summary>
/// 采集完目录
/// </summary>
private void SetFinishCatalogueButtonStatus()
{
this.btnGatherCatalogue.Enabled = true;
this.btnGatherQA.Enabled = this.dgvQACatalogue.Rows.Count > 0;
btnStop.Enabled = false;
_isStart = false;
try
{
_threadGetQA.Abort();
_threadGetQA = null;
}
catch (Exception)
{ _threadGetQA = null;
} this.Width--; if (_autoGatherConfig != null && _autoGatherConfig.IsAuto) // 如果是自动采集
{
btnGatherQA_Click(null, null); // 采集问答
}
} ///<summary>
/// 采集目录
/// </summary>
private void GatherCatalogue()
{
object obj = new object();
lock (obj)
{
SetCode setCode = new SetCode(SetCodeText);
SetQA setQA = new SetQA(SetQACatalogues);
SetNote setNote = new SetNote(SetTextNote);
ButtonStatus buttonStatus = new ButtonStatus(SetFinishCatalogueButtonStatus);
_sbMessage = new StringBuilder();
_listQA = new List<DAS_QA.Model.DAS_GatherQA>(); _sbMessage.Append("开始采集目录......\r\n\r\n"); this.Invoke(setNote, _sbMessage.ToString()); string strHTML = ""; // 站点源代码
List<string> listQAUrlAndTitle = null; // 问答路径和标题列表
string[] QAUrlAndTitle = null; // 问答路径和标题
DAS_QA.Model.DAS_GatherQA gatherQA = null; // 问答信息
int webSiteIndex = 0; // 处理的第几个站点
DAS_QA.Model.DAS_WebsiteConfig webSite = null; //当前处理的站点
DataRow row = null; // 采集的新闻信息行
List<string> listUrl = null; // 站点列表网址集合
for (webSiteIndex = 0; webSiteIndex < _listCheckWebsite.Count && _isStart ; webSiteIndex++)
{
webSite = _listCheckWebsite[webSiteIndex];
listUrl = new List<string>();
_sbMessage.Append("正在请求站点" + webSite.Website + " " + webSite.WebsiteUrl + "\r\n");
this.Invoke(setNote, _sbMessage.ToString()); listUrl.Add(webSite.WebsiteUrl); if (webSite.AutoListRule != "" && webSite.AutoListRule.ToLower() != "http://")
{ for (int strat = webSite.StartNum; strat <= webSite.EndNum; strat += webSite.Distance)
{
listUrl.Add(webSite.AutoListRule.ToLower().Replace("#var#", strat.ToString()));
}
} for (int urlIndex = 0; urlIndex < listUrl.Count && _isStart ; urlIndex++)
{
strHTML = Framework.HTMLHelper.GetHTMLByUrl(listUrl[urlIndex],webSite.WebsiteEncoding);
if (strHTML == null || strHTML == "")
{
_sbMessage.Append("请求页面" + listUrl[urlIndex] + "时出错!没有找到此站点!\r\n\r\n "); }
else
{
_sbMessage.Append("已成功获取页面" + listUrl[urlIndex] + "的源代码!\r\n\r\n开始分析页面" + listUrl[urlIndex] + "的问答列表区域......\r\n");
this.Invoke(setNote, _sbMessage.ToString()); this.Invoke(setCode, strHTML);
strHTML = Framework.HTMLHelper.GetHtmlContent(strHTML, webSite.ListAreaRule);
if (strHTML == null || strHTML == "")
{
_sbMessage.Append("没有找到页面" + listUrl[urlIndex] + "的问答列表区域! \r\n\r\n ");
this.Invoke(setNote, _sbMessage.ToString());
}
else
{ _sbMessage.Append("已成功获取页面" + listUrl[urlIndex] + "的问答列表区域!\r\n \r\n开始分析页面" + listUrl[urlIndex] + "的问答列表区域......\r\n\r\n");
this.Invoke(setNote, _sbMessage.ToString());
listQAUrlAndTitle = Framework.HTMLHelper.GetHtmlContentList(strHTML, webSite.ListRule); if (listQAUrlAndTitle == null || listQAUrlAndTitle.Count == 0)
{
_sbMessage.Append("没有找到页面" + listUrl[urlIndex] + "的问答列表区域的具体问答! \r\n\r\n ");
this.Invoke(setNote, _sbMessage.ToString());
}
else
{ _sbMessage.Append("已成功获取页面" + listUrl[urlIndex] + "的" + listQAUrlAndTitle.Count.ToString() + "篇问答!\r\n\r\n开始分析页面" + listUrl[urlIndex] + "的问答路径......\r\n\r\n");
this.Invoke(setNote, _sbMessage.ToString()); for (int i = 0; i < listQAUrlAndTitle.Count && _isStart; i++)
{ QAUrlAndTitle = Framework.HTMLHelper.GetUrlAndTitle(listQAUrlAndTitle[i], webSite.ListRule);
} }
}
}
}
if (webSiteIndex == _listCheckWebsite.Count - 1)
{
_sbMessage.Append("\r\n\r\n\r\n所有站点已处理完毕!\r\n");
}
else
{
_sbMessage.Append("\r\n\r\n等待处理下一个站点......\r\n\r\n"); } this.Invoke(setNote, _sbMessage.ToString()); } this.BeginInvoke(buttonStatus);
} }以上是代码,在调试模式下能正常运行,直接运行exe文件时,处理16条数据后,窗体无响应。
急需! 先谢谢各位高手了!!
解决方案 »
- System.Windows.Forms.TreeNode怎么声明为变量对像
- 关于T4模板生成代码
- C#中怎样在一个textBox中,只能输入数字,并且只能用Backspace和Delete删除,其它键都不可用
- winform编程时,File.ReadAllText读取出来的内容乱码,怎么办
- 在登陆页面当中,我既可以用用户名进行登陆也可以用邮箱进行登陆?
- 菜鸟提问:一个DataGrid,有一行,现想让这一行能修改,但不能加新行,如何做?谢谢
- 多线程进度条问题,求帮忙
- RichTextBox中乱码问题
- 如何用C#调用另一台机器用C#写的COM+服务??
- 请教一个简单的问题?
- 数据库数据的导入导出~~~
- 数据库导出Excel
/// 设置获取的新闻标题委托
/// </summary>
/// <param name="table"> </param>
delegate void SetQA();
private void SetQACatalogues()
{
dgvQACatalogue.DataSource = _tbQACatalogueList;
dgvQACatalogue.Refresh();
System.Threading.Thread.Sleep(5);
} 修改为
/// <summary>
/// 设置获取的新闻标题委托
/// </summary>
/// <param name="table"></param>
delegate void SetQA(int gatherQAID, string qATitle);
private void SetQACatalogues(int gatherQAID, string qATitle)
{
DataRow row = _tbQACatalogueList.NewRow();
row["GatherQAID"] = gatherQAID;
row["QATitle"] = qATitle;
row["QAStatus"] = "未处理";
_tbQACatalogueList.Rows.Add(row);
dgvQACatalogue.Refresh();
System.Threading.Thread.Sleep(5);
}