Ведение лога для многопоточного приложения - 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);
}
}
}