I've got some serial code that Jirka very helpfully sent to a friend of mine when we were working on XM that could be helpful. PM me if you're interested.
Yeah I have some that I played with about a year ago or so. I looked at it last night. The "pain" is in setting up the serial port as you have to drop to the lower level C routines, but after that it is all NSFileHandle work which is pretty simple.
I've already started to think about the interface to it, but if someone wants to beat me to the punch they are more than welcome to
.net 2.0+ has a great SerialPort class (System.IO.SerialPort). It has event callback functionality and everything. I've successfully used it to communicate with and parse data from a Holux M1000 GPS. I've started a little bit of work to communicate with and parse data from a Elmscan 5, just haven't gotten around to it yet. Either way, that library is awesome. No looping through or waiting for returns, just use the built in eventhandler functions and you're good to go.
NSFileHandle has the same functionality that you are talking about, it is just for basic file handles though. You just need to request the underlying C file id from the object so you can set it up the serial port configuration (bits, speed, etc..), then you just use NSFileHandle to handle your select loop type monitoring of it and it will notify you when there is work to be done.