NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Načítání HTML stránek ve smyčce

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
jenda
Člen
Avatar
jenda:13.4.2016 17:59

Poprosím o radu s následujícím: Mám jednoduchou smyčku, ve které načítám html stránku. Potíž je se zobrazením této stránky, protože se zobrazí až poslední stránka. Stránku bych chtěl zobrazovat ve formuláři ve webBrowseru1 (mohla by tam zůstat třeba 10 vteřin). Smyčka vypadá nějak takto:

var dokument = HtmlDocument.Load(zdroj);
var aTags = dokument.DocumentNode.SelectNodes("//a[@href]");
foreach (var aTag in aTags)
{
        cesta =  aTag.Attributes["href"].Value;
        webBrowser1.Navigate(cesta);
}

Chová se to tak, že proběhne nejprve celá smyčka a teprve poté se zobrazí stránka, namísto toho aby se stránka zobrazila při každém průchodu smyčkou. Poradíte prosím?

 
Odpovědět
13.4.2016 17:59
Avatar
Odpovídá na jenda
sadlomaslox25:13.4.2016 20:53

no a proc tam nedas ten prikaz aby tam ta stranka zustala 10s ? pokud ho tam das tak te to nejspis navede k tomu ze stale neuvidis nic a navic aplikace bude strasne zamrzat. to te nasmeruje k tomu ze cekani se neda provadet na UI vlakne a resi se to bud pres casovac nebo pres druhe vlakno. casovace jsou vetsinou 2 jeden nesynchonizovany s UI a druhy synchronizovany a pro komunikaci mezi vlaknem a UI se pouzivaji synchronizace jako Invoke nebo Dispatcher. pokud budes studovat dal tak te to navede k .net 4.5 ktery pridal podporu pro jednoduchou manipulaci s vlakny a UI pomoci klicovych slow await a async. :)

 
Nahoru Odpovědět
13.4.2016 20:53
Avatar
LacoS.
Člen
Avatar
Odpovídá na jenda
LacoS.:13.4.2016 23:25

Urob si jednoduchy casovac (10sec) a v nom si nacitavaj tu stranku;

Nebude Ti to fungovat, ak iba vytvoris cyklus (foreach) na citanie stranky
a na jeho konci dat pauzu 10sec;

 
Nahoru Odpovědět
13.4.2016 23:25
Avatar
jenda
Člen
Avatar
Odpovídá na sadlomaslox25
jenda:16.4.2016 10:17

Tohle je na mě moc složité, tak daleko se myslím nikdy nedostanu :-(

Ale vyřešil jsem to přes timer, kdy si v timeru udělám jednoduchou smyčku s IF a počítadlem a načítáním stránky, v DocumentCompleted zastavím timer, vyřeším zpracování stránky a zase pustím timer.

 
Nahoru Odpovědět
16.4.2016 10:17
Avatar
00
Člen
Avatar
Odpovídá na jenda
00:4.5.2016 14:38

timer == časovač

 
Nahoru Odpovědět
4.5.2016 14:38
Avatar
Odpovídá na jenda
Neaktivní uživatel:7.5.2016 12:12

Něco takového by nestačilo? Případně to celé dáš do while (true). Nevím, čeho přesně chceš docílit.

var dokument = HtmlDocument.Load(zdroj);
var aTags = dokument.DocumentNode.SelectNodes("//a[@href]");
foreach (var aTag in aTags)
{
        cesta =  aTag.Attributes["href"].Value;
        webBrowser1.Navigate(cesta);
        Thread.Sleep(10 * 1000);
}
Editováno 7.5.2016 12:13
Nahoru Odpovědět
7.5.2016 12:12
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:7.5.2016 12:38

Nechceš si uspat hlavní vlákno na 10 vteřin :)

Nahoru Odpovědět
7.5.2016 12:38
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.