For at undgå cross-thread fejlen, bliver du nød til at tilgå din UserControl via Invoke() metoden. Invoke() metoden tager imod en delegate, denne delegate bliver da kørt i brugergrænsesnittets tråd. For at gøre dette nemt, kan det anbefales at bruge anonyme delegates.
Først et eksempel på, hvordan man ikke skal gøre: myUserControl.BackColor = Color.Blue;
Denne kode giver den fejl du har beskrevet. For at bruge invoke med anonyme delegates, skal man have en eller anden delegate at referere til. Tilføj f.eks. følgende kode et eller andet sted i dit namespace eller klasse:
public delegate void Invoker();
Når du så skal gøre noget med din UserControl, gør da følgende:
Når du kalder panel.Clear() bliver din UserControl fjernet fra panelet, men den bliver ikke destrueret. Når du tilføjer den samme UserControl igen senere, vil den være i samme state som da du fjernet den. OnLoad bliver kun kaldt når UserControl klassen bliver instantieret, og ikke når den bliver fjernet fra en panel.
Instantier en ny instans af din UserControl i stedet!
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.