See http://msdn.microsoft.com/msdnmag/issues/02/10/NETSerialComm/default.aspx