Avatar billede majbom Novice
14. februar 2006 - 11:41 Der er 2 kommentarer og
1 løsning

gennemløb af streng med foreach

hejsa, jeg sidder her med et program, der får data fra com-porten, og når den har hentet det, vil jeg gennemløbe strengen, da der skal laves linjeskift ved en bestemt karakter "|", men det driller lidt, jeg har lavet dette:

private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  string input = port.ReadExisting();
  foreach (char ch in input.ToCharArray())
  {
      if (ch.ToString() == "|")
      {
        txtLog.Text = "\n";
      }
      else if (ch.ToString() == "&")
      {
        MessageBox.Show("Log hentet");
      }
      else
      {
        txtLog.Text = ch.ToString();
      }
  }
}

men jeg får denne fejlmeddelelse: "Cross-thread operation not valid: Control 'txtLog' accessed from a thread other than the thread it was created on."
men det er altså det eneste sted jeg tilgår txtLog...

håber der er lidt hjælp at hente

på forhånd tak
Avatar billede aaberg Nybegynder
14. februar 2006 - 13:18 #1
Denne fejl kommer, hvis du prøver at ændre brugergrænsefladen fra en anden tråd end den der "ejer" brugergrænsefladen. Hvis din metode kører i en seperat tråd, og txtLog er en textbox, vil denne fejl opstå.

Løsningen er følgende:

Først laver du en metode på din form som kan opdatere din textbox. F.eks:
public void SetText(string text)
{
  this.txtLog.Text = text;
}

Derefter laver du en delegate, som kan eksekvere denne metode. F.eks:
public delegate void SetTextHandler(string text);

For at køre metoden i den rigtige tråd, skal du bruge Form.Invoke. Dette skal du gøre fra din port_DataRecieved metode.

this.Invoke(new SetTextHandler(this.SetText), new object[]{"text som skal skrives ud"});

Inkoke metoden gør, at den medsendte delegate bliver kørt i den rigtige tråd.
Avatar billede majbom Novice
14. februar 2006 - 14:15 #2
mange tak, det virker lige efter planen...

kom med svar! :)
Avatar billede aaberg Nybegynder
14. februar 2006 - 14:18 #3
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