Gå til innhold

Anbefalte innlegg

Hei,

 

Har en liten situasjon her Har satt igang en backgroundworker som kjører en prosess i bakgrunnen av en gui, som da gjenspeiler status osv.. Imidlertid får jeg opp en rar melding ved debuggging.

 

main starter slik:

 

Application.Run(new Meny());

 

Som starter backgroundworker. Videre rapporterer backgroundworker på følgende måte:

 

bw.ReportProgress(20, new String[] { "90", "Henter andeler og kroner", "..." });

 

og min lytter:

 

private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
       {        
           this.samlet_progressbar.Value = e.ProgressPercentage;
           String[] str = (String[])e.UserState;
           this.lille_progressbar.Value = int.Parse(str[0]);
           this.overskrift_lille_progress.Text = str[0];
       }

 

Denne oppdaterer to progressbarer og en label som er på den ene progressbaren.

Imidlertid, kommenterer jeg ut de to nederste linjene kjører ting ok, men med en gang jeg tar med de to siste tilordningene så får jeg en Exception på Main() ??

"Exception has been thrown by the target of an invocation".

 

-Men den greier da vitterlig å oppdatere den første progressbaren helt fint om jeg dropper de to nederste oppdateringene. ??

 

Victurus!

Lenke til kommentar
Videoannonse
Annonse

Du må bruke Invoke funksjonen på formen for å endre verdien på en progressbar, grunnen til dette er at formens kontroller ikke er tilgjengelig på tvers av tråder.

 

Invoke fungerer ved at den får tråden som eier formen, til å kalle en funksjon.

 

Derfor må du legge til en funskjon som heter f.eks. SetProgressBarValue.

Lenke til kommentar
Alle kontrollere bør vel la seg endre i ProgressChanged-eventet uten ekstra mas med Invoke/delegate?

 

Det er nettopp det jeg trodde var tilfellet og. -Og det som er litt merkverdig er at jeg får oppdatert en av progressbarene helt fint. Det er først når jeg blander inn en til og en oppdatering på en label at det blir problemer med invoke. Forstår ikke helt hvordan det kan være sånn

 

Victurus!

Lenke til kommentar

Jeg prøvde med samme kode som deg nå, funka fett. Jeg tror du får exeption i konvertering fra string-tall til integer? Pass på at det du konverterer faktisk er et tall, evnt håndtere tall med desimaler. Pass på å hold styr på index'ene i UserState-objektet (string array) ditt. Jeg ser du bruker samme index to ganger, men det er kanskje meninga.

 

Edit: Sjekk at verdiene du oppdaterer progressBar IKKE overstiger MaximumValue-property'en (default: 100) Dette vil også kaste en exception

Endret av xtc
Lenke til kommentar

Takker for responsen, dere sparte meg for mye hodebry :)

Det viste seg at det var igjen en "gammel" report i koden, som ikke sendte med et String array, som da videre produserte en exception ved tilordningen. :blush: Dog var det veldig deilig at kodesnutten fungerte, sparte meg for veldig mye omlegging!

 

 

Victurus!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...