Ведение лога для многопоточного приложения - C#
Формулировка задачи:
Всем привет!
Задача состоит вот в чем:
Создаются потоки, выполняющие какие то операции(сейчас это не важно).
На главной форме есть кнопка, по котрой происходит запуск потоков и richTextBox, собственно в который я хочу записывать ход выполнения потоков, к примеру:
Пусть имеется функция, принимающая 2 целых рандомных параметра и возвращающая их сумму.
Пример лога:
Проблема в том, что потоки не могут получить доступ к richTextBox и соответственно записать в него текст.
Может есть какие другие способы ведения лога?
Жду Ваших советов!
Заранее всем спасибо!
Поток1 - входные параметры 3 и 4
Поток2 - входные парметры 4 и 10
Поток1 - результат 7
Поток3 - ....
....
Решение задачи: «Ведение лога для многопоточного приложения»
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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д