Ведение лога для многопоточного приложения - C#

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

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

Всем привет! Задача состоит вот в чем: Создаются потоки, выполняющие какие то операции(сейчас это не важно). На главной форме есть кнопка, по котрой происходит запуск потоков и richTextBox, собственно в который я хочу записывать ход выполнения потоков, к примеру: Пусть имеется функция, принимающая 2 целых рандомных параметра и возвращающая их сумму. Пример лога:
Поток1 - входные параметры 3 и 4 Поток2 - входные парметры 4 и 10 Поток1 - результат 7 Поток3 - .... ....
Проблема в том, что потоки не могут получить доступ к richTextBox и соответственно записать в него текст. Может есть какие другие способы ведения лога? Жду Ваших советов! Заранее всем спасибо!

Решение задачи: «Ведение лога для многопоточного приложения»

textual
Листинг программы
    public partial class Form1 : Form
    {
        private const int MaxThread = 5;
        delegate void LogAsync(string text);
        private readonly AutoResetEvent reset;
        private readonly List<Thread> threads; 
        public Form1()
        {
            InitializeComponent();
            reset = new AutoResetEvent(false);
            threads = new List<Thread>();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string[] task = File.ReadAllLines("task.txt");
            foreach (string s in task)
            {
                Thread worker = new Thread(Start);
                worker.Start(s);
                if (threads.Count >= MaxThread) reset.WaitOne();
            }
        }
 
        private void Start(object o)
        {
            //Делаем дело и логируем
            Log((string)o);
            threads.Remove(Thread.CurrentThread);
            reset.Set();
        }
 
        private void Log(string text)
        {
            if (richTextBox1.InvokeRequired)
            {
                richTextBox1.BeginInvoke(new LogAsync(s => textBox1.AppendText(s)), text);
            }
            else
            {
                richTextBox1.AppendText(text);
            }
        }
    }

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


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

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

11   голосов , оценка 4.273 из 5
Похожие ответы