Передача сообщений между потоками - 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")); };
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д