C# winform(WebBrowser) 多线程问题
我要实现的功能是通过WebBrowser加载网页,然后解析这个网页的源码,并生成一个Html dom Tree 显示在TreeView控件上展现给用户。但是现在遇到问题: 一是遇到信息量大的网站解析比较慢,出现假死的情况;二是在解析生成树的过程中如果鼠标操作界面,就会卡死,希望得到大家的帮助。
下面是我实现这个功能的部分代码:
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
return;
}
//如果页面加载完成 就执行网页解析操作
parserHtml();
}
//创建线程,进行网页解析并生成htmldomTree,然后domTree显示到界面上
pravate void parserHtml()
{
Thread thread = new Thread(new ThreadStart(createDomTree));
thread.Start();
}
private delegate void delegateUpdateTreeView(TreeNode treeNode);//委托
//实现网页的解析 和domTree的生成
void createDomTree()
{
TreeNode treeNode = parserHtmltoTree();//这个遇到信息量大的网站挺费时间
BeginInvoke(new delegateUpdateTreeView(delegateUpdateTreeViewImpl), treeNode);
}
//更新界面
void delegateUpdateTreeViewImpl(TreeNode treeNode)
{
this.TreeView1.Nodes.Add(treeNode);//把从网页中解析的信息以tree的形式显示到TreeView控件中
Application.DoEvents();
}
补充:界面假死或者卡死在控制台中打印如下异常信息:
A first chance exception of type 'System.UnauthorizedAccessException' occurred in (工程名称)*.exe。在网上找了一些方法,也没有得到解决。
希望得到大家的帮助!
下面是我实现这个功能的部分代码:
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
return;
}
//如果页面加载完成 就执行网页解析操作
parserHtml();
}
//创建线程,进行网页解析并生成htmldomTree,然后domTree显示到界面上
pravate void parserHtml()
{
Thread thread = new Thread(new ThreadStart(createDomTree));
thread.Start();
}
private delegate void delegateUpdateTreeView(TreeNode treeNode);//委托
//实现网页的解析 和domTree的生成
void createDomTree()
{
TreeNode treeNode = parserHtmltoTree();//这个遇到信息量大的网站挺费时间
BeginInvoke(new delegateUpdateTreeView(delegateUpdateTreeViewImpl), treeNode);
}
//更新界面
void delegateUpdateTreeViewImpl(TreeNode treeNode)
{
this.TreeView1.Nodes.Add(treeNode);//把从网页中解析的信息以tree的形式显示到TreeView控件中
Application.DoEvents();
}
补充:界面假死或者卡死在控制台中打印如下异常信息:
A first chance exception of type 'System.UnauthorizedAccessException' occurred in (工程名称)*.exe。在网上找了一些方法,也没有得到解决。
希望得到大家的帮助!
...全文
相关推荐
winform多线程计算调用js
winform 多线程 js 相互调用
C# Winform与WebBrowser控件:HTML交互技术详解
WebBrowser控件是.NET框架中用于在Windows Forms应用程序中嵌入Web浏览器体验的一种控件。它允许开发者创建一个能够加载和显示网页的环境,使得用户无需离开应用程序界面就可以浏览网页内容。WebBrowser控件基于Internet Explorer浏览器技术,因此它支持大多数IE所支持的HTML和脚本功能。这种控件特别适合于需要显示网页内容或进行简单Web交互的桌面应用程序。利用WebBrowser控件,开发者可以控制网页的导航、内容的加载以及与网页内元素的交互。
【C# winform练习】利用控件实现浏览器功能的方法(webbrowser和WebKit)
大佬让我做一个在winform内查询gps定位地图的功能,没搞过。gps公司就扔给我们两个链接让我们自己调。想了一下,只要在winform里搞个类似浏览器的控件,查什么传什么参数就ok了。万事俱备,只差百度。 Webbrowser控件 首先考虑的肯定是winform自带的控件,webbrowser。使用起来非常的简单方便。 在工具箱——所有Windows窗体——webbrowser 直接拖到for...
c# winform 显示word
c# winform 显示word 解决了 不能在winform窗体上显示word文档的问题 该程序能完美的将word文档显示在winform窗体中
winform web qq
winform web qq winform web qq


