Avatar billede anadan Nybegynder
16. august 2005 - 10:22 Der er 25 kommentarer og
1 løsning

gennemtvinge Refresh()

Jeg har lavet en application der kører et krævende job og opdaterer min GUI, ved at bruge den nye klasse BackgroundWorker. Problemet er at hvert kald til Refresh() ikke laver en opdatering, da main thread ikke har nok ressourcer til at lave opdateringen, da BackgroundWorker arbejder. Når jeg kører applikationen i debugging mode er der ikke noget problem, da jeg har indsat nogle breakpoints, og tråden dermed har god tid til at opdatere.

Er der en måde man kan tvinge en opdatering igennem?
Avatar billede spif2001 Nybegynder
16. august 2005 - 10:24 #1
Er ikke lige så stiv i det update halløj, men er der ikke noget med, at man skal kalde Invoke på formen?
Avatar billede anadan Nybegynder
16. august 2005 - 10:26 #2
Invoke tager en delegate som argument, kan du give et eksempel?
Avatar billede spif2001 Nybegynder
16. august 2005 - 10:29 #3
haha - næ - er heller ikke stiv i delegates.

Men kan du ikke lave en delegate til formens update / refresh og så bruge den til et invoke kald når du har brug for det?
Avatar billede anadan Nybegynder
16. august 2005 - 10:29 #4
Hvis du mener Invalidate, så virker det ikke, da Refresh() svarer til Invalidate() efterfuldt af Update()
Avatar billede anadan Nybegynder
16. august 2005 - 10:31 #5
hmm, jeg er heller ikke god til delegates. jeg er nødt til at se et eksempel så
Avatar billede spif2001 Nybegynder
16. august 2005 - 10:31 #6
kan man ikke lave en delegate til et kald af Invalidate?

Når du så vil kalde Invoke på formen bruger du den delegate som inparameter til Invoke.
Avatar billede anadan Nybegynder
16. august 2005 - 10:31 #7
problemet er jo at det virker i debugging mode, hvor tråden har tid nok
Avatar billede anadan Nybegynder
16. august 2005 - 10:32 #8
arh, kan du ikke lige give et kode eksempel...
Avatar billede spif2001 Nybegynder
16. august 2005 - 10:34 #9
har ikke noget :) - giver dig bare input - ikke løsninger....

DELEGATE ELSPERTER - HJÆÆÆÆLP
Avatar billede spif2001 Nybegynder
16. august 2005 - 10:36 #10
Avatar billede anadan Nybegynder
16. august 2005 - 10:36 #11
hehe, grundlæggende er det vist sådan BackgroundWorker virker, ved at bruge delegates.
Avatar billede spif2001 Nybegynder
16. august 2005 - 10:38 #12
åbenbart :)
Avatar billede anadan Nybegynder
16. august 2005 - 10:38 #13
har læst den før og prøvet den, problemet er at jeg bruger compact framework
Avatar billede spif2001 Nybegynder
16. august 2005 - 10:40 #14
så ser det jo lidt sort ud, sådan som jeg læser CF afsnittet...
Avatar billede anadan Nybegynder
16. august 2005 - 10:42 #15
jep, da jeg prøvede den løsning havde jeg problemer med at softkeyboardet og waitcursoren ikke forsvandt fra displayet når jeg lavede en Refresh(), og det var ikke engang fordi at tråden ikke havde tid til at opdatere, de blev på skærmen efter at den anden tråd var færdig
Avatar billede anadan Nybegynder
16. august 2005 - 10:44 #16
men lige nu har jeg noget der virker, den opdaterer bare ikke min gui
Avatar billede spif2001 Nybegynder
16. august 2005 - 10:47 #17
Man kan ikke override Refresh funktionen? Fjerne waitcursor og keyboard og så kalde base.Refresh()?

kræver selvf. du laver din egen Form...
Avatar billede anadan Nybegynder
16. august 2005 - 10:51 #18
Det er også prøvet, det virkede ikke
Avatar billede spif2001 Nybegynder
16. august 2005 - 10:57 #19
De kan godt nok være længe om svar på GotDotNet, men som regel kan de finde ud af det. Du kan jo prøve at poste dit spørgsmål her:

http://www.gotdotnet.com/Community/MessageBoard/MessageBoard.aspx?ID=275
Avatar billede anadan Nybegynder
16. august 2005 - 10:57 #20
Problemet er at tråden kører i baggrunden og tager alle ressourcer, og Refresh bliver kaldt alt for sent. Jeg har også prøvet at køre det hele i en tråd, og indimellem kalde Application.DoEvents() til at håndtere events. Det gav også problemer med softkeyboard og waitcursor
Avatar billede spif2001 Nybegynder
16. august 2005 - 11:02 #21
Du kan ikke sætte din backgroundworker tråd til laveste prioritet?

dinTråd.Priority = ThreadPriority.Lowest;

og måske køre den som background:

dinTråd.IsBackground = true;
Avatar billede spif2001 Nybegynder
16. august 2005 - 11:10 #22
Prøv lige at læse afsnittet "Background Processing and the User Experience" i denne msdn artkiel:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetcomp/html/CompactfxTechArt.asp
Avatar billede anadan Nybegynder
16. august 2005 - 11:10 #23
Hmm, ThreadPriority.Lowest ser ud til at virke. Jeg vil lige køre noget test, og se om der virker hver gang, eller jeg bare har været heldig ;)
Avatar billede anadan Nybegynder
16. august 2005 - 11:19 #24
Okay, det har løst problemet. Smid et svar for point :D

Hvis andre skulle få brug for BackgroundWorker til CF (eller ikke har skiftet til 2.0, hvor den er med), er den tilgængelig her : http://www.danielmoth.com/Blog/2004/12/backgroundworker-for-cf-10.html
Avatar billede spif2001 Nybegynder
16. august 2005 - 11:20 #25
goody :) - læste du msdn artiklen?
Avatar billede anadan Nybegynder
16. august 2005 - 11:22 #26
Jeg har lige tilføjet den mine foretrukne, så kigger jeg på den senere, men den ser meget god ud :)
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