Передача сообщений между потоками - C#

Узнай цену своей работы

Формулировка задачи:

Привет! Есть у меня простой класс-логгер:
    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("Получена команда на запуск");
при загрузке window (WPF) я подписываюсь на события логгера и вывожу лог в текстбокс Пока приложение было однопоточным всё отлично работало, но теперь методы отлажены и надо всё распараллелить (идет обращение к 40 БД на разных хостах поэтому всё хорошо параллелится) Но теперь возникла проблема - при попытке прочитать отправленное сообщение из другого потока возникает эксепшн "Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток." Как это грамотно и с малой кровью исправить?

Решение задачи: «Передача сообщений между потоками»

textual
Листинг программы
Logger.OnMessage += s =>
    {
        if (Dispatcher.CheckAccess())
            LogContainer.Text += (s + "\n");
        else
            Dispatcher.InvokeAsync(() => LogContainer.Text += (s + "\n"));
    };

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5