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


von RobiToastbrot (Gast)


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:
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
}

von ♪Geist (Gast)


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;

von RobiToastbrot (Gast)


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

von Dr. Sommer (Gast)


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).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.