Eventhantering
Håller på med serieportsavläsning av HW och skall göra en liten RFID-simulator då jag bara har begränsad tillgång till tester mot hårdvaran.
Tanken var då en klass som ärver System.IO.Ports.SerialPort och sedan override:ar DataRecieved-eventet. Tror jag vet hur jag ska göra men får inte eventet att funka pga SerialDataReceivedEventArgs inte kan instantieras. Test-eventet (utan parametrear) fungerar ju...
Mvh
Markus
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | namespace AntennSimulatorComponent { public delegate void DataRecievedDelegate( object sender, System.IO.Ports.SerialDataReceivedEventArgs e); public delegate void TestDelegate(); public class Simulator : System.IO.Ports.SerialPort { public event DataRecievedDelegate DataRecieved; public event TestDelegate Test; protected virtual void OnDataRecieved(System.IO.Ports.SerialDataReceivedEventArgs e) { // Ger fel: // System.NullReferenceException was unhandled Message="Object reference not set to an instance of an object." DataRecieved( this , e); } protected virtual void OnTest() { Test(); // funkar } // Testmetod klienten anropar för att trigga igång event-testen public void foo() { OnTest(); System.IO.Ports.SerialDataReceivedEventArgs sdrea = null ; // saknar konstruktor... hur göra??? OnDataRecieved(sdrea); } public Simulator() { } } } |
Svara
Sv: Eventhantering
Exception:et får du troligtvis för att du inte knutit någon metod till DataReceived eventet. Fixa med:
1 2 3 4 | if ( null != DataReceived ) { DataReceived( this , e ); } |
Klassen SerialDataReceivedEventArgs har en konstruktor som är märkt internal, d.v.s. den kan bara instansieras av kod i samma assembly, i detta fall System.dll.
Svara