12. februar 2005 - 21:19Der er
7 kommentarer og 1 løsning
Super mystisk GUI problem ?
Hejsa alle...
Jeg er løbet ind i en underlig opførsel i et lille windows applikations projekt. Vil gerne høre om nogen har en ide til hvad der kan være gal.
Jeg har et treeview, som når jeg tilføjer et element via Add(string) metoden, så stopper metoden simpelthen der. Metoden bliver kaldt igennem et observer pattern´s updateobservers, men dette burde jo ikke gøre metoden anderledes.
Har prøvet at debugge gennem Visual Studio, og lige meget hvad jeg gør, så når den kommer til linjen:
mitTreeView.Nodes.Add(EtObjekt.StringProperty)
- så går den ud af metoden! Er helt på bar bund, hvis jeg sætter en knap ind og laver et event på den, som bare tilføjer en node på samme måde, så gør den det fint nok.
Har selvfølgelig testet af variablen som jeg indsætter indeholde en streng og at den streng ikke er tom.
Et tydeligt eksempel på at det virkelig ER i den linje, som den stopper er, at hvis jeg laver en MessageBox.Show() lige før og lige efter linjen, så kommer den første fint nok, men nummer 2 gør aldrig...
Er virkelig forvirret hvordan det kald kan få en metode til at stoppe.
200 point til nogen som af/bekræfte mit problem ved at lave et lille eksempel der bruger observerpattern, og som ved updateobservers() tilføjer noget til et treeview!
Mit problem lå netop i at mit system var distribueret (og dermed multithreaded!).
Kaldet til mit observerpattern kommer fra en anden applikation, og ligeprævis et tree-view må kun opdateres fra sin egen tråd.
Hvis andre løber ind i samme problem, så kan jeg sige, at løsningen er - Enten at bruge et listview! *g* - eller også bruge Invoke metoden på tree-view kontrollen. Her kan man med en delegate få sit GUI opdateret fra den rigtige tråd.
Mange tak fordi du prøvede at genskabe fejlen, og hvis du ligger et svar, så skal du få de point. Om ikke andet, så kan det bruges til andre der skal have et eksempel på Observer-pattern! :-)
det er ikke kun treeview. Generelt bør alt GUI-relateret køres fra en og samme tråd, og hvis man har brug for at kalde nogle "GUI-metoder" fra andre tråde skal man bruge Invoke. Det gælder også f.eks. listview, selvom den måske ikke brokker sig på samme måde.
Synes godt om
Ny brugerNybegynder
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.