The buffer is the most versatile and efficient way to go.

There's nothing wrong with using a thread - remember, the DataRecieve method runs on a separate thread.