Toon posts:

[C#] Webbrowser Refresh

Pagina: 1
Acties:

Verwijderd

Topicstarter
Probeer een simpele pagina te laten verversen via C#, automatisch.

Dit lukt wel met

webBrowser.Refresh()

Maar eigenlijk zou ik graag dat er een 60 seconden tussen zit voordat er ververst wordt, nu heb ik ergens gelezen dat het met Thread.Sleep zou kunnen.

Dit lijkt wel te werken, de pagina wordt elke keer ververst, echter slaat het steeds vast zodra ik in het venster klik.

Wat is de missing clue om een aantal seconden mee te geven aan het refresh commando?

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
Met Thread Sleep laat je de huidige thread wachten; als je dat uitvoert op je UI thread, blokkeer je dus je UI thread voor 60 seconden.

De makkelijkste oplossing om dit te doen, is te werken met een Timer. Als je op refresh klikt, start je de timer, en in de Elapsed of Tick event (afh. van het type timer), refresh je de control, en stop je de timer opnieuw.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Hoewel het me weinig zegt, wil ik het best zo even proberen, lijkt me wel te doen, echter is het dus de bedoeling dat er niet geklikt hoeft te worden.

Het gaat om een pagina die gegevens uit een mailbox laadt en doorstuurt naar de database, gemaakt door een collega :), welke dus eigenlijk 24u per dag moet refreshen...

Draait nu met een pluginn van Firefox welke het doet, maar is niet de ideale oplossing eigenlijk./

[ Voor 47% gewijzigd door Verwijderd op 04-01-2007 11:57 ]


  • Vincenz0
  • Registratie: Augustus 2006
  • Laatst online: 25-09 14:06

Vincenz0

Coder

zoals whoami zegt, gebruik een timer, je kunt deze ook automatisch laten starten door hem onder de initialise van je form te zetten.

Coding 4 Fun!


  • Rowdy.nl
  • Registratie: Juni 2003
  • Laatst online: 28-11 14:33

Rowdy.nl

Koekje d'r bij?

Een kleine vraag, heb je speciale redenen om dit met een webpagina te doen? Is een service maken niet netter (en handiger)?

Rowdy.nl - X++ by day. C# by night. I drink coffee in the morning and beer in the evening.


Verwijderd

Topicstarter
Service is netter, handiger ook, maar daar heb ik al helemaal geen kaas van gegeten :)

  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

Als ik je probleem goed begrijp zou je ook met een text based browser zoals Lynx een scheduled task kunnen maken die gewoon iedere minuut Lynx opstart en naar de gegeven pagina navigeert. :)

Een soortgelijke zaak heb ik namelijk ook eens zo opgelost. Dit betrof een verplaatsing van een website van Apache/Linux -> IIS/Win2k3 waardoor ik geen cronjobs meer kon gebruiken. Gewoon een scheduled task (windows versie van een cronjob) met Lynx aangemaakt, en klaar ;)

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Verwijderd

Topicstarter
Heeft ie dan na een dag niet zo'n 200 browser vensters openstaan?

  • riddles
  • Registratie: April 2000
  • Laatst online: 26-05 15:33
Gewoon met AT en WGET onder windows iets als het volgende aanroepen:
wget.exe -O - -q http://www.serverdomain.com/script.aspx

  • Vincenz0
  • Registratie: Augustus 2006
  • Laatst online: 25-09 14:06

Vincenz0

Coder

riddles schreef op donderdag 04 januari 2007 @ 12:14:
Gewoon met AT en WGET onder windows iets als het volgende aanroepen:
wget.exe -O - -q http://www.serverdomain.com/script.aspx
ik denk een timer starten in je c# applicatie makkelijker is dan losse apps er bij gaan pakken?

gewoon een timer in je project zetten, hem op 60 seconde per tick zetten.
dan bij je initialise van het form timer laten starten.

in de timer.tick code zet je gwoon webBrowser.Refresh(); en het werkt gewoon :)

Coding 4 Fun!


  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

Verwijderd schreef op donderdag 04 januari 2007 @ 12:06:
Heeft ie dan na een dag niet zo'n 200 browser vensters openstaan?
Nee hoor. Als dat zou was dan zou een scheduled task nooit handig zijn toch? Nee een scheduled task kan zichzelf prima afsluiten na een bepaalde periode. Wat ik zelf dus doe is: Iedere 2 minuten de task opstarten, en elke task na 1 minuut af laten sluiten. Werkt prima :)

Wat overigens een mooie tip is, mocht je deze manier gebruiken, is de scheduled task onder een ándere account dan de ingelogde te draaien. Anders zie je altijd het browser scherm en dat kan lastig zijn als je met die pc ook moet werken. Door een ander account te gebruiken wordt het proces in de achtergrond gedraaid.
Vincenz0 schreef op donderdag 04 januari 2007 @ 12:21:
ik denk een timer starten in je c# applicatie makkelijker is dan losse apps er bij gaan pakken?
Hij maakt toch een C# applicatie? Dat is net zo goed een 'losse app' als een scheduled task dat is. Dat C# programma heeft hij (voor zover ik begrijp) nergens anders voor nodig dan voor refreshen.

[ Voor 20% gewijzigd door Cloud op 04-01-2007 12:24 ]

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 01-12 23:19

DizzyWeb

Ondertiteld

Vincenz0 schreef op donderdag 04 januari 2007 @ 12:21:
[...]


ik denk een timer starten in je c# applicatie makkelijker is dan losse apps er bij gaan pakken?

gewoon een timer in je project zetten, hem op 60 seconde per tick zetten.
dan bij je initialise van het form timer laten starten.

in de timer.tick code zet je gwoon webBrowser.Refresh(); en het werkt gewoon :)
Tenzij het enige doel van die C# applicatie is om die pagina te laden en constant te refreshen, nietwaar? :)

  • Rowdy.nl
  • Registratie: Juni 2003
  • Laatst online: 28-11 14:33

Rowdy.nl

Koekje d'r bij?

Verwijderd schreef op donderdag 04 januari 2007 @ 12:06:
Heeft ie dan na een dag niet zo'n 200 browser vensters openstaan?
Nee, want hij haalt het resultaat op en sluit het 'venster'. Zie ook riddles' post.

Een service stelt helemaal niet zoveel voor; volg deze tutorial en je hebt erg snel je service klaar...

Zoals we het hier eens heel quick en dirty opgelost hebben (een Timer component in je service is netter) zou je in de Onstart() een thread kunnen starten, die een functie met een loop aanroept, die je zaken uitvoert.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
private bool m_bStop;

protected override void OnStart(string[] args)
{ 
    eventLog1.WriteEntry("my service started");

    // Init our stop var
    m_bStop = false;

   // Create a thread that does all the things that we need to do
   Thread t = new Thread(new ThreadStart(DoStuff));      
   t.Start();
}

protected override void OnStop()
{ 
    eventLog1.WriteEntry("my service stoped");

   // Stop 
   m_bStop = true;
}

private void DoStuff()
{
   while(!m_bStop)
   {
       /*** YOUR CODE ***/

      // Let the thread rest for 60 secs
      Thread.Sleep(600000);
   }
}


Je zou dus het code voorbeeld daar kunnen downloaden, bovenstaande code toevoegen/aanpassen en je eigen code even toevoegen en je bent klaar... ;)

het is natuurlijk verstandiger om de tutorial door te lezen, dan weet je ook wat je doet... 8)

Rowdy.nl - X++ by day. C# by night. I drink coffee in the morning and beer in the evening.


Verwijderd

Topicstarter
Mja,

Even weeste eten en een helehoop reacties verder.

Wat ik nu momenteel even heb gedaan is "lelijk" een meta refresh op 5 seconden in de asp pagina gezet, die maar in het venster opgeroepen dus dat de refresh op[ de pagina zelf wordt gedaan

Momenteel vreet het echtefr nog 18mb geheugen, mag best nog wat minder :)

  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

Verwijderd schreef op donderdag 04 januari 2007 @ 13:16:
Mja,

Even weeste eten en een helehoop reacties verder.

Wat ik nu momenteel even heb gedaan is "lelijk" een meta refresh op 5 seconden in de asp pagina gezet, die maar in het venster opgeroepen dus dat de refresh op[ de pagina zelf wordt gedaan

Momenteel vreet het echtefr nog 18mb geheugen, mag best nog wat minder :)
Je zou er misschien een console application van kunnen maken. Dat neemt sowieso minder geheugen omdat de forms en dergelijke niet aangemaakt hoeven te worden. Maar dan nog blijf ik bij de door mij aangedragen oplossing in combinatie met Lynx of WGET. Lynx neemt bij mij maar 3,4 megabytes geheugen namelijk. En daar hoef ik 0,0 voor te programmeren ;)

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


  • Rowdy.nl
  • Registratie: Juni 2003
  • Laatst online: 28-11 14:33

Rowdy.nl

Koekje d'r bij?

wolkje schreef op donderdag 04 januari 2007 @ 14:23:
[...]

Je zou er misschien een console application van kunnen maken. Dat neemt sowieso minder geheugen omdat de forms en dergelijke niet aangemaakt hoeven te worden. Maar dan nog blijf ik bij de door mij aangedragen oplossing in combinatie met Lynx of WGET. Lynx neemt bij mij maar 3,4 megabytes geheugen namelijk. En daar hoef ik 0,0 voor te programmeren ;)
Dan is de vraag nog of TS beschikt over een *nix server...? ;)

Service neemt ook weinig geheugen in beslag...

Rowdy.nl - X++ by day. C# by night. I drink coffee in the morning and beer in the evening.


  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

Rowdy.nl schreef op donderdag 04 januari 2007 @ 16:06:
Dan is de vraag nog of TS beschikt over een *nix server...? ;)
Ik stel nergens dat de TS *nix nodig heeft hoor.
riddles schreef op donderdag 04 januari 2007 @ 12:14:
Gewoon met AT en WGET onder windows iets als het volgende aanroepen:
wget.exe -O - -q http://www.serverdomain.com/script.aspx
WGET draait onder windows. en ^^
Lynx draait onder windows.
En in plaats van cronjobs had ik het over scheduled tasks ;)

Kortom: de TS kan dit prima met Windows*.

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Verwijderd

Rowdy.nl schreef op donderdag 04 januari 2007 @ 12:34:
[...]

Nee, want hij haalt het resultaat op en sluit het 'venster'. Zie ook riddles' post.

Een service stelt helemaal niet zoveel voor; volg deze tutorial en je hebt erg snel je service klaar...

Zoals we het hier eens heel quick en dirty opgelost hebben (een Timer component in je service is netter) zou je in de Onstart() een thread kunnen starten, die een functie met een loop aanroept, die je zaken uitvoert.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private bool m_bStop;
private Thread t;

protected override void OnStart(string[] args)
{ 
    eventLog1.WriteEntry("my service started");

    // Init our stop var
    m_bStop = false;

   // Create a thread that does all the things that we need to do
   t = new Thread(new ThreadStart(DoStuff));      
   t.Start();
}

protected override void OnStop()
{ 
    eventLog1.WriteEntry("my service stoped");
   t.Stop();
   // Stop 
   m_bStop = true;
}

private void DoStuff()
{
   while(!m_bStop)
   {
       /*** YOUR CODE ***/

      // Let the thread rest for 60 secs
      Thread.Sleep(600000);
   }
}


Je zou dus het code voorbeeld daar kunnen downloaden, bovenstaande code toevoegen/aanpassen en je eigen code even toevoegen en je bent klaar... ;)

het is natuurlijk verstandiger om de tutorial door te lezen, dan weet je ook wat je doet... 8)
Je Thread moet natuurlijk ook nog gestopt worden, anders heb je kans op memory leaks (Zie je code).
Pagina: 1