Передача сообщений между потоками - C#
Формулировка задачи:
Привет!
Есть у меня простой класс-логгер:
Я из любых мест приложения отправляю ему сообщения по типу:
при загрузке window (WPF) я подписываюсь на события логгера и вывожу лог в текстбокс
Пока приложение было однопоточным всё отлично работало, но теперь методы отлажены и надо всё распараллелить (идет обращение к 40 БД на разных хостах поэтому всё хорошо параллелится)
Но теперь возникла проблема - при попытке прочитать отправленное сообщение из другого потока возникает эксепшн "Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток."
Как это грамотно и с малой кровью исправить?
static class Logger
{
public delegate void Message(string msg);
static public event Message OnMessage;
static public void SendMessage(string msg)
{
OnMessage?.Invoke(msg);
}
}Logger.SendMessage("Получена команда на запуск");Решение задачи: «Передача сообщений между потоками»
textual
Листинг программы
Logger.OnMessage += s =>
{
if (Dispatcher.CheckAccess())
LogContainer.Text += (s + "\n");
else
Dispatcher.InvokeAsync(() => LogContainer.Text += (s + "\n"));
};