Можно твою функцию чтения сделать асинхронной - завернуть в обёртку, тогда получение не будет блокировать прогу.
static public async Task Boolean readSocket()
При этом нужно синхронизировать процесс обработки полученной строки c контекстом текущего потока (наверное).