我在c#中使用WebBrowser控件来检查几个搜索引擎的结果,但有时无缘无故地卡住了。我的第一个想法是将每个搜索函数作为一个线程,并使用来自计时器的thread.abort(),但无论我尝试过什么,都无法使用UI控件(包括WebBrowser)进行处理。 任何人都有我的解决方案?一个例子将是伟大的,因为我已经尝试了很多东西,并且我一直在获取所有这些例外。通过线程访问控制
Q
通过线程访问控制
0
A
回答
1
我相信你可以在后台工作者中使用WebRequest &避免处理COM线程模型的困难。您可以使用WebRequest.Timeout处理任何您认为耗时过长的事情。
尝试这样:
static void Main(string[] args)
{
BackgroundWorker bg = new BackgroundWorker();
bg.DoWork += backgroundWorker_DoWork;
bg.RunWorkerAsync(new List<object> { "http://download.thinkbroadband.com/512MB.zip" });
while (true) {}
}
private static void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
Console.WriteLine("Starting operation.");
BackgroundWorker bw = sender as BackgroundWorker;
List<object> args = (List<object>)e.Argument;
var url = (string)args[0];
WebRequest request = WebRequest.Create(url);
request.Timeout = 300;
try
{
WebResponse response = request.GetResponse();
Console.WriteLine("Request successful.");
}
catch (Exception ex)
{
Console.WriteLine("Request timed out.");
}
}
web浏览器是当你要嵌入IE浏览器的一个实例为您展示层,你应该使用一个组件。除非你需要这个,否则你可以使用更轻量级的东西。
0
使用控制的.Invoke()方法:http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx
还有其他的方法可以使用太:.BeginInvoke和.EndInvoke异步所调用。
if(control.InvokeRequired)
{
control.Invoke(control.delegate);
}
相关问题
- 1. 通过hgweb.config控制访问
- 2. 通过访问控制功能访问url的具体访问
- 3. 通用WPF多线程访问控件
- 4. 访问控制从另一个线程
- 5. WinForms线程安全控制访问
- 6. 无法通过代码访问控制
- 7. 通过控制台从php访问pdo
- 8. 通过变量全局访问控制
- 9. 通过PhaseListener访问控制器
- 10. 通过按钮控制线程
- 11. NHibernate会话通过多线程访问
- 12. 线程访问GUI控件
- 13. VB.NET [跨线程操作无效:控制'txtIncomingText'从线程访问........]
- 14. 通过程序访问Java插件控制面板
- 15. Marionette js通过requirejs从控制器访问应用程序
- 16. 通过应用程序访问控制器动作 - Zend
- 17. 通过主线程控制工作线程的工作
- 18. 通过SSL访问tomcat7控制台的问题
- 19. 通过线程问题
- 20. 访问`session`轨控制线内
- 21. 访问控制
- 22. 过程控制问题
- 23. 通过Web UI访问纱线日志
- 24. 通过Java访问的Google路线API
- 25. 多线程,访问UI控件
- 26. 了解跨线程控件访问C#
- 27. 通过角度控制器名称访问控制器构造函数
- 28. 预检不通过控制检查访问控制允许来源不存在
- 29. 多线程线程控制
- 30. 通过Javascript访问日历控件
究竟是你想要检查这些搜索引擎?你为什么使用WebBrowser?你不能使用HttpRequest吗? – 2011-04-29 16:54:14