[C# - WINXP (WIN7)] - Webbrowser navigeert pas na focus

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • thegve
  • Registratie: Februari 2004
  • Laatst online: 15-09 13:00
Situatie
Ik heb een project waarbij ik voor een deel van de applicatie een website/webapp wil laden door middel van een webbrowser component.
Dit is de opvolger van een vorige implementatie (van een ex- ex- collega), waarvan we de sourcecode niet meer hebben. Van deze implementatie is er een lang openstaande bug, dat er tijdens het laden een 'wit scherm' is te zien. Dit is dus een webbrowser component die nog niets heeft ingeladen, en dat ziet er aardig witjes uit.
Nu had ik hiervoor de oplossing/workaround bedacht van een 'bezig met laden van...' splash scherm te laten zien, en na een 'documentcompleted' event, dit splash scherm weg te halen en het form te tonen.

Ik heb dus 2 forms. Een standaard formpje met een webbrowser component erop, en een laadschermpje. Deze is via een private variabele vastgeknoopt aan het hoofd formulier, en via delegates kan ik hiervan de statustext & progressbar bijwerken. Dit werkt op zich prima (naast het laden van dit webformulier worden er nog meer dingen gedaan bij het starten).

Probleem
De webpagina lijkt pas te gaan laden nadat ik met de muis focus op het laadscherm of op het gewone scherm zet. Ik dacht eerst dat het puur het documentcompleted event was, maar ik heb nu een tail op het (Apache) serverlog gezet, en daar zie ik dat de request uberhaubt niet word gedaan.

Overwogen/getest
- BUG: DocumentComplete Does Not Fire When WebBrowser Is Not Visible - Maar deze is al uit 2003, en lijkt allang te zijn opgelost.
- Het licht toch aan het niet zichtbaar zijn van het form - noop, ook nadat ik het hoofdform zichtbaar heb gemaakt treed het nog op.
- Ik start het navigeren voordat de message loop loopt ( Application.Run ), dit schijnt vrij kritiek te zijn voor het webbrowser component
C#:
1
2
3
4
5
6
7
8
9
private void BrowserForm_Load(object sender, EventArgs e)
        {         
            if (!this.IsHandleCreated)
            {
                CreateHandle(); //voor message loop
            }

            this.Navigate(@"ter test hardgecode de interne url waarnaar genavigeerd moet worden");
        }

Maar ook dit lost het niet op, en nu moet de message loop toch wel draaien lijkt me (los van dat ik dit punt om een .navigate in te zetten niet heel chique vind, maar het is ter test). De .navigate van het form zet wat booleans om, handled Exceptions bij het navigeren, maar het belangrijkste is dat hij uiteindelijk ook een .Navigate doet op het webbrowser component.

Iemand een suggestie waar ik nog verder zou kunnen kijken, of nog beter, iemand een idee wat het probleem en een eventuele oplossing is?

[ Voor 0% gewijzigd door thegve op 29-11-2010 11:35 . Reden: Paar ernstige typo's weggehaald. ]


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 08-09 11:33
Hoe bedoel je dat de message loop nog niet is gestart?

Zelf CreateHandle() aanroepen lijkt me niet echt de bedoeling: http://msdn.microsoft.com...control.createhandle.aspx en volgens mij start daar de message loop ook niet percee mee (maar dat kan ik verkeerd hebben).

Wat nog een andere optie is, is om in een workerthread een gewoon HTTPRequest te doen, en daarna de opgehaalde content als content van het webbrowsercontrol in te stellen.

Edit, let dan wel hier op: http://weblogs.asp.net/gu...n-webbrowser-control.aspx

[ Voor 12% gewijzigd door roy-t op 29-11-2010 12:11 ]

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • thegve
  • Registratie: Februari 2004
  • Laatst online: 15-09 13:00
@roy-t:

Die wijsheid heb ik uit het volgende stackoverflow topic gehaald:
http://stackoverflow.com/...-windows-forms-webbrowser

Jouw voorstel, wat feitelijk (in combinatie met de 'let hier op' pagina die je aangeeft), neerkomt op about:blank instellen als url, en het dan vullen met data die ik via een andere route ophaal, vind ik erg onwenselijk. Daarnaast is het ook de bedoeling dat zaken als NTLM authenticatie netjes blijven werken, en hiervoor is een IE component wel zo makkelijk. Ik weet niet zeker of een HTTPrequest deze ook op de achtergrond gebruikt, al verwacht ik het wel opzich.
Het lijkt mij dat als de URL niet goed staat, dat relatieve links in de applicatie dan ook direct niet meer werken, en dat vind ik *nogal* vervelend.

Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 08-09 11:33
Ja mijn oplossing was niet de netste. Blij dat je het nu werkend hebt iig.

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • thegve
  • Registratie: Februari 2004
  • Laatst online: 15-09 13:00
Ik heb het niet werkend... Hoe kom je daar bij?

Acties:
  • 0 Henk 'm!

  • thegve
  • Registratie: Februari 2004
  • Laatst online: 15-09 13:00
Omdat ik hier al een week mee bezig ben, heb ik maar een nieuw project gestart (in dit project zit slechts deze webbrowser GUI), en van scratch opnieuw begonnen.
Geeeen idee wat ik nu anders doe, maar nu werkt hij wel goed! (al zitten nog niet alle features erin nu, maar dat is simpelweg wat business rules toevoegen).
Pagina: 1