C# von EventHandler auf Variablen zugrifen

Gast #5180518
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:
1
namespace Monitor
2
{
3
    class clSerialCom
4
    {
5
        private SerialPort ArduinoPort = new SerialPort();
6

7
        public enum RcvStatus
8
        {
9
            Reset = 0,
10
            FirstFlag,
11
            SecondFlag,
12
            Length,
13
            MsgReceived
14
        };
15

16
        public RcvStatus ReceiveState = RcvStatus.Reset;
17

18
        public bool OpenPort( string ArduinoPortName)
19
        {
20
            if (ArduinoPortName == null) return false;
21
            ArduinoPort.PortName = ArduinoPortName;
22
            ArduinoPort.DataBits = 8;
23
            ArduinoPort.Parity = Parity.None;
24
            ArduinoPort.StopBits = StopBits.One;
25
            ArduinoPort.BaudRate = 9600;
26

27
            try
28
            {
29
                ArduinoPort.Open();
30
                ArduinoPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
31
                return true;
32
            }
33
            catch
34
            {
35
                return false;
36
            }
37
        }
38

39
        private static void DataReceivedHandler(
40
                    object sender,
41
                    SerialDataReceivedEventArgs e)
42
        {
43
            SerialPort sp = (SerialPort)sender;
44

45
            
46
            byte RcvByte;
47

48
            switch (ReceiveState)
49
            {
50
                case RcvStatus.Reset:
51
                    break;
52
            }
53
        }
54
    }
55
}
Gast #5180540
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;
Gast #5180866
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
Gast #5180883
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.