Avatar billede segato Nybegynder
08. marts 2006 - 21:00 Der er 8 kommentarer og
1 løsning

WebBrowserControl Og click events

Jeg ved godt der er mange points men hvis nogen besvare det her spørgsmål er det dem alle værd, da jeg har googlet så meget uden held og selv siddder helt fast.

Hvis man bruger funktionen navigate på en webbrowsercontrol, kan man beslutte hvor når hele siden er loaded ved at bruge følgende kode:

if( webBrowser.ReadyState != WebBrowserReadyState.Complete )
      Application.DoEvents();

Men hvis jeg nu loader en side hiver et HtmlElement (link f.eks.) og laver følgende kald:

htmlElement.InvokeMember("click");

Dette vil begynde at loade en ny side men hvornår beslutter man om den er færdig?
Avatar billede hacked Nybegynder
08. marts 2006 - 23:57 #1
Hm - nu har jeg bare læst lidt og ikke afprøvet så meget.
Men såvidt jeg kan se returnere din invokeMember et Object. Dermed må metoden vel være udført når objektet er returneret.
Avatar billede segato Nybegynder
09. marts 2006 - 08:09 #2
Nej den kører asynkront. Ville ellers være lækkert.
Avatar billede hacked Nybegynder
09. marts 2006 - 16:43 #3
Hvor står at den er asynkron? Jeg kan nemlig ikke finde noget om det.

Et eksempel TreeView - BeginInvoke er asynkron mens Invoke ikke er det - info: http://www.codeproject.com/csharp/begininvoke.asp. Sad selv lidt fast da jeg skulle foretager nogle opdateringer.

Ps. følgende antyder også at den ikke er asynkron - kig på eksemplerne.
http://samples.gotdotnet.com/quickstart/howto/doc/Invoke.aspx.
Avatar billede hacked Nybegynder
09. marts 2006 - 17:07 #4
Avatar billede segato Nybegynder
09. marts 2006 - 18:01 #5
Jammen man kunne godt fristes til at tro InvokeMember har noget med Invoke og beginInvoke, men de to ting har intet med hiannden at gøre. InvokeMember simulere et event på et HtmlDocument og det kører selvfølgelig asynkront ellers ville din browser stå og stene hver gang du loadede en side. Du skal søge på InvokeMember på HtmlDocument og denne funktion findes kun i .NET 2.0. Men det er sådan set ikke den der driller den fungere fint. Det er ReadyState på documenetet der ikke bliver sat, men har fundet ud af det kun er på enkelte sites www.flybillet.dk så begynder at tro problemmet er noget helt andet.
Avatar billede hacked Nybegynder
09. marts 2006 - 22:55 #6
Glem foregående (msdn2 skriver heller ikke noget om det) - Anyway kan du ikke bruge event: DocumentCompleted på din webbrowsercontrol?
citat:" Dette vil begynde at loade en ny side men hvornår beslutter man om den er færdig? "
Avatar billede hacked Nybegynder
09. marts 2006 - 23:00 #7
Hvis det ikke virker, hvad er det så der ikke virker på www.flybillet.dk som virker på andre sites?
Avatar billede segato Nybegynder
10. marts 2006 - 11:19 #8
Hej Malkor!

En document complete virker ikke da den ikke fortæller dig hvornår hele navigationen er færdig. Den fortæller bare alle redirects. Når man vil vide hvornår hele navigationen er førdig bruger man følgende kode:

while( webbrowser.ReadyState != WebBrowserReadyState.Complete )
      Application.DoEvents();

Dette virker hvis du bruger Navigate. Men det der ikke virkede er hvis du hiver et element ud og laver en InvokeMember("click") på en given submit knap.
Avatar billede segato Nybegynder
27. april 2006 - 14:51 #9
Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester