Sono stato sommerso dalle richieste di aiuto e di modifica che alla fine ho dovuto cedere... :-)
Mi e' stato da sempre chiesto di implementare la gestione degli eventi (tipo RING,CD,RTS) sopratutto per poter emulare con .NET il famoso evento OnComm che il controllo mscomm32.ocx ha e che, mi sono reso conto solo ora, e' diffusissimo.
Non l'avevo implementato inizialmente perche', come sempre dico, ho sviluppato la classe nel lontano 2001 per mia esigenza personale e, lavorando sempre in modalita Master-Slave non ho mai usato gli eventi.
La modalita' Async presente nella versione precedente non e' mai stata testata a fondo anche se (mi sono io stesso sorpreso) tutto sommato funzionicchiava.
Onestamente pensavo fosse piu' semplice, visto che la realizzazione ha richiesto l'utilizzo di un thread e, purtroppo, non sono riuscito a trovare un modo per far si che un evento generato da un thread secondario venga gestito, senza inconvenienti, nel thread principale (se siete curiosi leggete qui)
La funzione WaitCommEvent (usata per l'evento) ha il problema che se usata in maniera sincrona blocca il thread e quindi non c'e modo di uscirne a meno di lavorare in modalita' Overlapped e sbloccare la WaitCommEvent usando SignalEvent().
L'uso della modalita' Overlapped mi ha, di conseguenza, costretto a modificare anche le funzioni base Tx e Rx gestendole in questa nuova modalita' (onestamente migliore)

Se volete vedere il codice scaricate la classe dalla sezione Goodies...

Per generare l'evento ho seguito le guidelines che suggeriscono di utilizzare un metodo protetto in modo che eventuali classe figlie possano personalizzarlo a loro piacimento.

Se siete curiosi e volete saperne di piu questo articolo e' veramente interessante.

Buona lettura!