Torna al Thread
bool semaphoreForDocCompletedEvent;
private void button12_Click(object sender, EventArgs e)
{
checkBox1.Checked = false; //unchecked if the NAvigating event is fired and Checked after DocumentCompleted is fired, only to have a visual reference on the Form
HtmlDocument doc = Program.wb.Document;
HtmlElement ele = doc.GetElementById("menuTable");
foreach (HtmlElement sub in ele.All)
{
if (sub.GetAttribute("href").Contains("something"))
{
ele = sub;
break;
}
}
//PHASE 1: clicking on a Web link to navigate to a page that contains other buttons and links object obj = ele.DomElement;
System.Reflection.MethodInfo mi = obj.GetType().GetMethod("click");
mi.Invoke(obj, new object[0]);
//PHASE 2: Waiting for document completed in order to be sure the document is fully loaded
semaphoreForDocCompletedEvent = WaitForDocumentCompleted();
if (!semaphoreForDocCompletedEvent)
throw new Exception("casino in giro!");
ele = doc.GetElementByI("button1").FirstChild.FirstChild.FirstChild.NextSibling;
//PHASE 3: clicking on a Web button to open a form
obj = ele.DomElement;
mi = obj.GetType().GetMethod("click");
mi.Invoke(obj, new object[0]);
//PHASE 4: displaying a modal MEssageBox that annoy the user a lot
if (checkBox1.Checked == false)
MessageBox.Show("non c'è stato document completed");
checkBox1.Checked = false;
//PHASE 5: submitting the form (that does not need any imput to be filled in)
ele = doc.GetElementById("planet");
ele = ele.FirstChild.NextSibling.NextSibling;
obj = ele.DomElement;
mi = obj.GetType().GetMethod("submit");
mi.Invoke(obj, new object[0]);
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
Program.toBox = Program.wb.Document.Body.InnerHtml.ToString();
if (Program.wb.ReadyState == WebBrowserReadyState.Complete)
{
checkBox1.Checked = true;
IsBusy = false;
}
}
private bool WaitForDocumentCompleted()
{
while (IsBusy)
{
Application.DoEvents();
Thread.SpinWait(1000);
}
return true;
}