I suggest you define all the operations related to establishing, maintaining, and raising events related to the use of the serial port in one
static class. Use Public Properties to expose access to data/buffers, etc. Expose serial port events to external classes by delegates, like 'Action and 'Func.
There are many public libraries for serial port interop with C#: [
^]. Check them out.
Here's a CP article many found useful: [
^]