Блокировка не важна. Вопрос чем заменить DataAvailable - например пришло сразу две строки, одну прочитали, DataAvailable сбросилось, вторая будет висеть и не прочитается пока не придет что-нибудь еще...
Что-то мне подсказывает, что от ReadLine() придется отказаться.