Avatar billede noem Nybegynder
29. juli 2008 - 09:57 Der er 2 kommentarer

Flytte Event til en anden tråd

Hej

Jeg har en klasse hvor jeg får en event fra en metode der kører i en anden tråd.

Når denne event kommer (fra den anden tråd) vil jeg gerne "rejse" en event på min egen tråd..

Hvordan går jeg dette smartest?

Skriv endelig hvis der er for dårligt beskrevet, så skal jeg prøve at uddybe lidt mere..
Avatar billede larslennon Nybegynder
31. juli 2008 - 08:31 #1
Hmm, det er lidt tricky, men kan godt lade sig gøre.
Jeg bruger min mainform til at sende data over com porten, men når der så kommer data ind igen, bliver det modtaget i Seriel() og der vil jeg gerne have et kald til main, for at behandle dataen.

public partial class MainForm : Form
{
Seriel seriel = new Seriel();

  public MainForm()
  {   
    seriel.DataHandler += new EventHandler(DataHandler);
  }

  delegate void SetDataCallback(object sender, EventArgs e);

  private void DataHandler(object sender, EventArgs e)
  {
    if (this.InvokeRequired)
    {
      this.Invoke(new SetDataCallback(DataHandler), new object[] { sender, e });
    }
    else
    {
    // Do Something
    SerielComm Package = (SerielComm)sender;
    /* Typecast af sender, som er det data vi sender med */
    }
  }
}

I Din serielle klasse skal der så være en eventfunktion.

class Seriel
{

  public EventHandler DataHandler = null; // En pointer til vores handler

  private void DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
  {
  RX_Char = (byte)serialPort.ReadByte();
  DataHandler(RX_Char, new EventArgs());
}

Jeg håber det kunne hjælpe lidt, Dette eksempel vil måske ikke lige compile, da jeg kun har lavet et udpluk af min kode. Hvis du ikke kan få det til at virke, skal du være velkommen til at skrive til L[a]rslennon.dk, så skal jeg nok hjælpe dig med et bedre eksempel, eller med din egen kode.

/Lars
Avatar billede noem Nybegynder
31. juli 2008 - 12:54 #2
Hej Lars

Ja minForm.Invoke brurger jeg også når jeg arbejder med forms, men dette er ikke en form men istedet en almindelig klasse.

Ellers tak for feedback

Grunder til at jeg vil have flyttet event over på den anden tråd er forbi min klasse skal registreres til COM og køres fra en ActiveX container, og der i den forbindelse at jeg ikke er sikker på om event's fra andre tråde vil skabe problemer ifm. COM
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