我在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. 通过线程访问
- 3. 通过线程访问ProgressBar
- 4. 通过访问控制功能访问url的具体访问
- 5. 通用WPF多线程访问控件
- 6. UI线程访问外部控制
- 7. 用JAVA控制信号线程访问
- 8. 访问控制从另一个线程
- 9. WinForms线程安全控制访问
- 10. 通过插件访问Redmine控制器
- 11. 通过控制台从php访问pdo
- 12. 通过变量全局访问控制
- 13. 通过PhaseListener访问控制器
- 14. 无法通过代码访问控制
- 15. ExtJS通过视图访问控制器
- 16. 通过多线程访问矢量?
- 17. 通过线程访问父类对象
- 18. NHibernate会话通过多线程访问
- 19. 通过按钮控制线程
- 20. 通过线段控制
- 21. 线程访问GUI控件
- 22. 通过控制器访问父级控制器的数据
- 23. VB.NET [跨线程操作无效:控制'txtIncomingText'从线程访问........]
- 24. Marionette js通过requirejs从控制器访问应用程序
- 25. 通过程序访问Java插件控制面板
- 26. 通过应用程序访问控制器动作 - Zend
- 27. 通过主线程控制工作线程的工作
- 28. 我们可以通过编程访问MS Windows中的过程控制块吗?
- 29. 通过控制绘制垂直线
- 30. 通过SSL访问tomcat7控制台的问题
究竟是你想要检查这些搜索引擎?你为什么使用WebBrowser?你不能使用HttpRequest吗? – 2011-04-29 16:54:14