2011-04-29 78 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浏览器的一个实例为您展示层,你应该使用一个组件。除非你需要这个,否则你可以使用更轻量级的东西。