[ unisoft @ 11.08.2012. 12:06 ] @
Nikako da mi podje za rukom sledece. Razvio sam klasu koja mi sluzi za rad sa SerialPortom. U klasi se nalazi jedna promenljiva nazvana _ComPort tipa SerialPort. Kada se desi DataRecive event ove promenljive pokrece se jedna metoda iz iste klase (pretplacena je na ovaj dogadjaj). Prikaz te metode je dat ispod.

Code:

        private void ComSaveExisting(object sender, SerialDataReceivedEventArgs e)
        {
            _Respone = _comPort.ReadExisting();
        }


u konsktruktoru klase pretplatio sam se na ovu metodu

Code:

        public IOOperations()
        {
            _comPort = new SerialPort();
            _comPort.DataReceived += new SerialDataReceivedEventHandler(ComReadExisting);
        }


Kreiran je C# Windows Form projekat (ne WPF). Iza forme se nalazi sledeci kod

Code:

        IOOperations instIO;
        public Main()
        {
            InitializeComponent();

            instIO = new IOOperations();
            instIO.FindDeviceComPortAndSet();
            instIO.ComBaudRate = 112500;
            instIO.ComHandshake = Handshake.None;
            instIO.ComStopbits = StopBits.One;
            instIO.ComDataBits = 8;
            instIO.ComOpen();
        }


instIO - je instanca klase koja je zaduzena za rad sa Serial Portom (u ovoj klasi se nalazi gore navedena metoda ComSaveExisting).

Kada se desi DataRecive dogadjaj, i pokrene metoda ComSaveExisting, izvrsava se linja koda koja cita podatke i cuva ih u promenljivu _Respone. Posto su podaci sacuvani meni treba da se pokrene metoda koja se nalazi u Formi. Ova metoda treba da se svaki put pozove kada se pokrene metoda ComSaveExisting iz klase. Pozivanje metode iz forme treba da se izvrsi iz metode koja se nalazi u klasi, a posle linije koda ._Respone = _comPort.ReadExisting(). U metodi u formi se nalazi kod koji obradjuje sadrzaj _Respone promenljive, pristupa mu preko GET PROPRERTY.

Code:

_Respone = _comPort.ReadExisting();
 --> KOD KOJI POZIVA METODU KOJA SE NALAZI U FORMI
 // KRAJ METODE 


Ja sam nesto pokusavao i sa delegatima, i eventima, i sa prosledjivanjem ref parametara ali nije mi uspelo.


Moguce je pretplatiti metodu na isti dogadjaj iz klase, DataRecive dogadjaj. Ovo je bila moja prva ideja ali sam odustao od toga. Kao sto znamo kada se desi dogadjaj sve metode koje su pretplacene na njega u isto vreme se obavestavaju o promenama. To moze da izazove Exception (ispali izuzetak), ili u jos gorem slucaju da se metoda u formi prva izvrsi, pokusa da procita vrednost promenljive _Respone, a da se tek posle toga izvrsi metoda iz klase koja cita podatke sa Serial Porta.

Da li je moguce odrediti redosled izvrsavanja metoda koje su pretplacene na isti dogadjaj?
[ radoica @ 11.08.2012. 20:40 ] @
Dodaj u klasu promenljivu MyForm (tj. onako kako ti se zove izvedena klasa) i promeni konstruktor:

Code:

class IOOperations {
     private MyForm _mf; //promenljiva koja cuva referencu na formu

    public IOOperations(MyForm mf) { // novi konstruktor
        _mf = mf;
    }

    private void ComSaveExisting(object sender, SerialDataReceivedEventArgs e) {
            _Respone = _comPort.ReadExisting();
            _mf.MyMethod(); // poziv public metoda iz forme
        }
}


Zatim u formi:

         public Main() {
            InitializeComponent();

            instIO = new IOOperations(this); // kreiras objekat tako sto prosledis referencu na formu
            instIO.FindDeviceComPortAndSet();
            instIO.ComBaudRate = 112500;
            instIO.ComHandshake = Handshake.None;
            instIO.ComStopbits = StopBits.One;
            instIO.ComDataBits = 8;
            instIO.ComOpen();
        }
[ ravni @ 13.08.2012. 08:13 ] @
S tim sto poziv metode iz forme treba obaviti kroz Invoke
Code:
_mf.Invoke(new Action(_mf.MyMethod), null)
jer se DataReceived desava na nekom nasumicnom threadu. Vise o tome na http://msdn.microsoft.com/en-u...s.serialport.datareceived.aspx
[ Qler01 @ 01.10.2014. 20:42 ] @
Mozda glupo pitanje, bolje da pitav vas koji vec koristite to nego da mi ostane nejasno.

Sta znaci pretplatiti se na neku metodu?

Dajte i jednostavan primer da bi shvatio,
havala!
[ AMD guy @ 01.10.2014. 21:10 ] @
http://msdn.microsoft.com/en-us/library/ms366768.aspx
Ovde imas opis i primer