Тут не ясно, что вы подразумеваете под "как можно получить переменную message в основном потоке".
Что для вас значит это "Получить"?
1. У вас код не рабочий, в static методе, вы не сможете установить переменную
инстанса класса.
2. С какой целью получить? У любого процесса единое адресное пространство и оно не имеет привязки к потоку, все доступно.
var socket = new Sockets();
socket.message - доступен из любого места программы, при наличии указателя на инстанс socket.
2.1. Если вам нужно значение отобразить в UI контроле (они хотят доступа только из потока создателя), то придется синхронизировать и выполнять установку значений из UI потока.
2.1.1. Вызов метода через метод Invoke контрола.
2.1.2. Старые добрые Windows messages - WM_USER, если у вас WinForms
2.1.3. SynchronizationContext
2.1.4. И другие специфичные варианты.
2.2. Если это не UI, то возможно вам и не нужна синхронизация (зависит от задачи)
2.2.1. Обычный Callback
2.2.2. Установка сигнального состояния Event