Доброго времени суток всем!
Пишу небольшой websocket client для взаимодействия с веб-сервисом. Для этого подключаю стороннюю библиотеку websocket-sharp.
Если упростить, то задача клиента состоит в том, чтобы вызвать определенные методы сервиса и обработать их. Как известно, при возвращении методом значения, срабатывает событие OnMessage() сокета. То есть таким образом, можно отлавливать все возвращаемые результаты методов данного веб-сервиса.
В моем случае, я помещал полученные значения в ArrayList, для дальнейшего его использования. Лист заполнялся значениями, но при его использовании, в том же методе main(), он всегда оказывался пустым. Как будто никакого заполнения и не происходило.
Вот как я это делаю в коде:
class Service
{
static ArrayList list = new ArrayList();
static void Main(string[] args)
{
using (var ws = new WebSocket(WSSpathToService))
{
ws.Connect();
ws.Send(someJsonCommandToService);
ws.OnMessage += (sender, e) =>
{
//заполняем коллекцию.
list.Add(e.Data);
//Тут размер list > 0
};
//вот тут list уже пустой
foreach (var item in list)
{
Console.WriteLine(item);
}
ws.Close();
}
}
}
Как выяснилось позже, добавление значении в коллекцию в событие OnMessage() и выборка данной коллекции происходят в разных потоках. Отсюда вопрос, как в консольном приложении правильно заполнить коллекцию значениями, полученными в рамках события onMessage(), и передать его в главный поток, для дальнейшего использования ?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости