Avatar billede neocron Nybegynder
16. august 2006 - 22:46 Der er 1 kommentar og
1 løsning

Cross-thread calls?

Jeg roder med threads lige nu for at få flere ting til at ske samtidig uden at det totalt lammer programmet indtil handlingerne er udført. Det er også fint, men nu er der noget slinger i valsen...


Hvis jeg inde i en Thread siger:

button1.Enabled = true;
eller
label1.Text = "Test";

Vil den fejle med en Exception når afviklingen når til dem.

Fejlen er:

"InvalidOperationException: Handling på tværs af tråde er ugyldig: Objectet 'button1' (eller label1 for den sags skyld) blev åbnet fra en anden tråd end den tråd, det blev oprettet i".

VS.Net nævner så "How to make cross-thread calls to Windows Forms Controls" men det har ikke hjulpet mig.

Er der nogen der kan svare mig på dette?
Avatar billede bennytordrup Nybegynder
17. august 2006 - 08:08 #1
Problemet er, at du kun må opdatere UI fra den tråd, der har oprettet UI. Alle andre tråde skal have deres UI-relaterede ting marshalled til den tråd, der håndterer UI. Du skal bruge en fremgangsmåde som følgende:

private delegate void MethodStringParameterDelegate(string text);

private void SetLabel1Text(string text) {
  if (InvokeRequired)
    Invoke(new MethodStringParameterDelegate(SetLabel1Text), new object[] { text } );
  else
    label1.Text = text;
}
Avatar billede neocron Nybegynder
17. august 2006 - 20:27 #2
Mange tak :)
Det løste problemet.

Har lige fået 4 bøger ind af døren om C# og der er vist en del om delegates.. må hellere få det læst :)
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