/ / Ako používať časovač s webovým prehliadačom v konzolovej aplikácii v kroku c #? - c #, c # -4.0, časovač, ovládanie webového prehliadača, aplikácie Windows

Ako používať časovač s webovým prehliadačom v konzolovej aplikácii v c #? - c #, c # -4.0, časovač, webbrowser-control, windows-applications

Snažím sa načítať viac adries URL za sebou a používam funkciu timer.tick, aby sa všetky údaje ajax načítali na webovú stránku.

  1. Problém je však v tom, že aplikácia konzoly sa zavrie pred časovačom.Tick je volanie po intervale časovača, pretože časovač je nové vlákno?

Poznámka****: Používam tiež [STAThread] pre hlavnú metódu, pretože ak ju nepoužívam, zobrazuje sa upozornenie týkajúce sa súboru .pdb nie je načítaný

  1. Aká je úloha [STAThread] tu?

Ako vyriešiť tento problém. Existuje nejaký spôsob, ako počkať, kým sa časovač zastaví. Nižšie sú uvedené príklady kódu.

static void Main(string[] args)
{
OpenURLInBrowser("https://www.google.co.in/");
}
private static void OpenURLInBrowser(String url)
{
if (!url.StartsWith("http://") && !url.StartsWith("https://"))
{
url = "http://" + url;
}
try
{
webbrowser.AllowNavigation = true;
webbrowser.ScriptErrorsSuppressed = true;
webbrowser.Navigate(new Uri(url));
WaitTillPageLoadsCompletly(DynamicWebBrowser.webbrowser);
timer.Interval = 10000;
timer.Tick += Timer_Tick;
timer.Start();
}
catch (UriFormatException)
{
return;
}
}
private static void Timer_Tick(object sender, EventArgs e)
{
if (webbrowser.ReadyState == WebBrowserReadyState.Complete)
{
HtmlElement element = webbrowser.Document.GetElementById("loadingDiv");
if (element != null)
{
Console.Write(element.OuterHtml + "nnn");
Console.WriteLine("==============================================================================================================" + "nnn");
timer.Stop();
int count = 0;
while (count < 2)
{
OpenURLInBrowser("https://www.google.co.in/");
count++;
}
}
}
}
private static void WaitTillPageLoadsCompletly(WebBrowser webBrControl)
{
WebBrowserReadyState loadStatus;
int waittime = 20000;
int counter = 0;
while (true)
{
loadStatus = webBrControl.ReadyState;
Application.DoEvents();
if ((counter > waittime) || (loadStatus == WebBrowserReadyState.Uninitialized) || (loadStatus == WebBrowserReadyState.Loading) || (loadStatus == WebBrowserReadyState.Interactive))
{
break;
}
counter++;
}
counter = 0;
while (true)
{
loadStatus = webBrControl.ReadyState;
Application.DoEvents();
if (loadStatus == WebBrowserReadyState.Complete && webBrControl.IsBusy != true)
{
break;
}
counter++;
}
}

odpovede:

1 pre odpoveď č. 1
static void Main(string[] args)
{
OpenURLInBrowser("https://www.google.co.in/");
Console.ReadKey();
}

Môžete použiť Console.ReadKey () alebo Console.ReadLine () zastaviť ukončenie aplikácie konzoly


0 pre odpoveď č. 2

Ide o nesprávny spôsob. Nemali by ste spustiť proces (v tomto prípade kontrolu WebBrowser) a potom prejsť do tesnej slučky a skontrolovať, či sa jeho stav nezmení.

Namiesto toho začnite načítavanie stránky a viažu kódudalosť dokončená pomocou ovládacieho prvku WebBrowser. Keď prehliadač dokončí načítanie stránky, vykoná dokončovací kód (ktorý môže načítať ďalšiu stránku alebo čokoľvek, čo chcete), bez toho, aby ste museli sedieť a monitorovať. je to v slučke, ktorá iba mrhá zdrojmi.

pozri: https://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.documentcompleted(v=vs.110).aspx