mikrocontroller.net

Forum: PC-Programmierung C# von EventHandler auf Variablen zugrifen


Autor: RobiToastbrot (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche von einem EventHandler auf eine Variable zuzugreifen die in 
der Klasse definiert ist. Ich bekomme aber immer die Fehlermeldung:

Für das nicht statische Feld, die Methode oder die Eigenschaft 
"clSerialCom.ReceiveState" ist ein Objektverweis erforderlich.

Der Fehler ist in der Zeile:
switch (ReceiveState)

Kann mir jemand einen Tipp gehen was ich machen muss.

Hier mein Code:
namespace Monitor
{
    class clSerialCom
    {
        private SerialPort ArduinoPort = new SerialPort();

        public enum RcvStatus
        {
            Reset = 0,
            FirstFlag,
            SecondFlag,
            Length,
            MsgReceived
        };

        public RcvStatus ReceiveState = RcvStatus.Reset;

        public bool OpenPort( string ArduinoPortName)
        {
            if (ArduinoPortName == null) return false;
            ArduinoPort.PortName = ArduinoPortName;
            ArduinoPort.DataBits = 8;
            ArduinoPort.Parity = Parity.None;
            ArduinoPort.StopBits = StopBits.One;
            ArduinoPort.BaudRate = 9600;

            try
            {
                ArduinoPort.Open();
                ArduinoPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
                return true;
            }
            catch
            {
                return false;
            }
        }

        private static void DataReceivedHandler(
                    object sender,
                    SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;

            
            byte RcvByte;

            switch (ReceiveState)
            {
                case RcvStatus.Reset:
                    break;
            }
        }
    }
}                

Autor: ♪Geist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Fehlermeldung sagt doch alles. Deklariere die Variable als static. 
Dann kannst du von allen Instanzen der Klasse auf diese zugreifen.
public static RcvStatus ReceiveState = RcvStatus.Reset;

Autor: RobiToastbrot (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Geist,

vielen Dank, das hat geholfen. Ich habe die Fehlermeldung so nicht 
verstanden. Ich hab die ganz Zeit überlegt wie ich einen Objektverweis 
mache :-)

Viele Dank.

Robert

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Das ist aber nicht so ganz Sinn der Sache. Ich kenn mich mit C# nicht so 
wirklich aus, aber versuch einfach mal das "static" bei 
DataReceivedHandler wegzulassen (und bei ReceiveState auch).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.