Как заполнить коллекцию внутри события OnMessage(), и вернуть ее в главный поток ?

232
06 ноября 2017, 19:24

Доброго времени суток всем!

Пишу небольшой 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(), и передать его в главный поток, для дальнейшего использования ?

READ ALSO
Не удаётся правильно извлечь Date из DateTime

Не удаётся правильно извлечь Date из DateTime

Как было указано в заголовке, не получается правильно извлечь Date из переменной DateTimeВот мой код:

248
Как создать новый проект в существующем решении в Visual Studio на Mac?

Как создать новый проект в существующем решении в Visual Studio на Mac?

Как создать новый проект в существующем решении в Visual Studio на Mac?

236
(C#) (WPF) Работа с listBox [требует правки]

(C#) (WPF) Работа с listBox [требует правки]

Люди добрые, помогитеПерешёл с UWP на WPF, по этому не могу простое

313
как создать связь One to Many

как создать связь One to Many

https://githubcom/RobinBuschmann/sequelize-typescript#foreignkey-belongsto-hasmany-hasone-belongstomany-api

225