2011-04-29 85 views
0

我在c#中使用WebBrowser控件來檢查幾個搜索引擎的結果,但有時無緣無故地卡住了。我的第一個想法是將每個搜索函數作爲一個線程,並使用來自計時器的thread.abort(),但無論我嘗試過什麼,都無法使用UI控件(包括WebBrowser)進行處理。 任何人都有我的解決方案?一個例子將是偉大的,因爲我已經嘗試了很多東西,並且我一直在獲取所有這些例外。通過線程訪問控制

+2

究竟是你想要檢查這些搜索引擎?你爲什麼使用WebBrowser?你不能使用HttpRequest嗎? – 2011-04-29 16:54:14

回答

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瀏覽器的一個實例爲您展示層,你應該使用一個組件。除非你需要這個,否則你可以使用更輕量級的東西。