我在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