C# OnMessage получение ответа
Проблема с отображение ответа.
var ws = new WebSocket();
ws.Connect();
ws.Send("getonline");
ws.OnMessage += (sender, e) =>
{
list.Add(e.Data);
Onlinelbl.Content = list[0].ToString();
};
Если писать MessageBox.Show(list[0].ToString()); то всё хорошо, а если пытаться присвоить текст lbl, то не получается.
Ничего не происходит, Label не меняет текст.
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Во-первых, список List<T> не является потокобезопасным.
Во-вторых вы не можете работать с контролами из стороннего потока.
Решить можно как-то так:
IProgress<string> progress = new Progress<string>(s =>
{
list.Add(s);
Onlinelbl.Content = s;
});
var ws = new WebSocket();
ws.Connect();
ws.Send("getonline");
ws.OnMessage += (sender, e) =>
{
progress.Report(e.Data);
};
Progress выполняет свой делегат всегда в том контексте синхронизации, в котором был создан.
При создании вопросов всегда указывайте, что за сторонние библиотеки вы используете. Мой телепатический навык подсказал, что это WebSocketSharp, но не всегда телепатия хорошо работает.