In the RealizarPesquisa
method, when running the _WebBrowser.Navigate()
line, the DocumentCompleted()
event is triggered, but this event takes a while to execute, so the RealizarPesquisa
method continues its process and when I go get the Document, it is coming null because eventoDocumentCompleted
has not yet completed, I tried to use AutoResetEvent
, but I did not succeed, does anyone have any suggestions?
public class GoogleSearch
{
private WebBrowser _WebBrowser;
private string _TituloPesquisa;
private string _LinkPesquisa;
private List<GoogleResultado> _GoogleResultadoList;
static AutoResetEvent aguardarDocumentCompleted = new AutoResetEvent(false);
public GoogleSearch()
{
ConfigurarWebBrowser();
_GoogleResultadoList = new List<GoogleResultado>();
}
public string GetResultJson
{
get
{
return _GoogleResultadoList.ToJsonSerialization<GoogleResultado>();
}
}
public IEnumerable<GoogleResultado> GetListResults
{
get
{
return _GoogleResultadoList.ToList();
}
}
public void Pesquisar(string textoConsulta)
{
RealizarPesquisa(textoConsulta);
}
private void _WebBrowserDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
aguardarDocumentCompleted.Set();
if (_WebBrowser.Document != null)
{
// Resultado em Html - Obter as Divs onde ficam o resultado da pesquisa do google.
HtmlElementCollection divs = _WebBrowser.Document.GetElementsByTagName("div");
// Obter dados da pesquisa.
_TituloPesquisa = _WebBrowser.Document.Title;
_LinkPesquisa = _WebBrowser.Document.Url.ToString();
GoogleResultado resultado;
foreach (HtmlElement x in divs)
{
// Div onde fica o resultado das pesquisas do google.
if (x.GetAttribute("className") == "g")
{
HtmlElement link = x.GetElementsByTagName("a")[0];
resultado = new GoogleResultado();
resultado.Titulo = link.InnerText;
resultado.Url = link.GetAttribute("href");
_GoogleResultadoList.Add(resultado);
}
}
}
}
private void ConfigurarWebBrowser()
{
_WebBrowser = new WebBrowser();
_WebBrowser.DocumentCompleted += _WebBrowserDocumentCompleted;
_WebBrowser.Url = new Uri("http://www.google.com.br", UriKind.Absolute);
}
private void RealizarPesquisa(string textoConsulta)
{
_WebBrowser.Navigate("https://www.google.com.br/search?num=100&q=" + textoConsulta);
aguardarDocumentCompleted.WaitOne();
var document = _WebBrowser.Document;
}
}