Avatar billede ladefoged Nybegynder
13. april 2010 - 10:14 Der er 5 kommentarer og
2 løsninger

RunWorkerCompletedEventArgs til ListView

Jeg er ved at lave et program som skal kunne fortage en søgning via en baggrunds proces, men er stødt ind i følgende problem.

Jeg har følgende kode
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
  e.Result = doBilledSoegning(); // doBilledSoegning returnere et ListView object
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
  MessageBox.Show(e.Result.ToString()); // returnere  "System.Windows.Forms.ListView, Items.Count: 2, Items[0]: ListViewItem: {DT gravko}"
}

I min naivitet regnede jeg med at jeg kunne sige listView1 = e.Result;
Men det giver følgende fejl: Cannot implicitly convert type 'object' to 'System.Windows.Forms.ListView'. An explicit conversion exists (are you missing a cast?)

Er der nogen af jer kloge hoveder som kan finde ud af hvordan jeg skal få smidt resultatet fra "e.Result" over i mit listView1
Avatar billede platik Nybegynder
13. april 2010 - 10:22 #1
Kan du ikke bare caste dit objekt om til en ListView igen? : listView1 = (ListView)e.Result;
Avatar billede ladefoged Nybegynder
13. april 2010 - 10:30 #2
Jo det ser faktisk sådan ud :), men jeg har så også oprettet ImageListen inde i doBilledSoegning() så den kommer jo ikke tilgængelig for listView1, men det må være min hovedpine.

Du har jo løst det spørgsmål jeg stillede :)
Avatar billede ladefoged Nybegynder
13. april 2010 - 12:00 #3
Så er der stødt et tillægsspørgsmål til

Når jeg bruger listView1 = (ListView)e.Result; så bliver der ikke vist nogle elementer i listView1 men hvis jeg f.eks. køre en MessageBox.Show(listView1.Items[0].Text); kommer den ud med den rigtige værdi.

Det er som om at listviewet ikke rigtig bliver opdateret, jeg har prøvet Update() og Refresh() men desværre uden held.

Er der nogen som har et forslag til en løsning?
Avatar billede bvli Praktikant
13. april 2010 - 12:43 #4
Du ændrer jo variabelreferencen på dit listview1 - ergo er dit forrige listview1 jo stadig det du har lagt ind på formen.

Den bedste løsning vil være at du lader din backgroundworker returnere en datastruktur i stedet og så i din complete-handler sætte dit listview1's datasource til resultatet.
Avatar billede ladefoged Nybegynder
13. april 2010 - 13:00 #5
bvil > det er også det jeg er kommet frem til, men håbede på der var en anden løsning, da det kræver en hel del omskrivning af koden, men der er hvis ingen nem måde at gøre det her på, når jeg har startet forkert :)

Vil I ikke smide et svar begge to, så deler jeg pointene 40/60 mellem jer
Avatar billede platik Nybegynder
14. april 2010 - 08:42 #6
svar
Avatar billede bvli Praktikant
14. april 2010 - 11:09 #7
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