Кирилл Легенда, Не факт, UI очень сильно сопротивляется обновлению из другого потока.
Как по мне вам лучше создать эвент, и по нему дергать обновление UI
Владимир Коротенко, System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'textBox6' не из того потока, в котором он был создан."
Мне нужно запустить метод из основного потока, но находящимся в другом классе, из третьего класса. BeginInvoke не существует в текущем контексте.
1. В форме создать класс работающий в фоне,
2. Подписаться на событие изменения данных
3. В обработчике вызвать метод IsInvokeRequired
3.1 Если да то создать делегат и передать его в метод BeginInvoke
У меня есть статический класс Log, в нем есть переменная самих логов(ее и нужно вывести). А как подписаться на событие? можно ли просто выводить в главной форме и потоке эту переменную, например каждые 0.5 сек.
Кирилл Легенда, киньте на форму таймер, по каждому тику опрашивайте ваш лог и добавляйте в форму данные. Либо создайте событие в классе лога и подпишитесь на него в форме, и дальше обрабатывайте с инвоком. Главное не мешать потоки,
Владимир Коротенко, спасибо, а работать с ниже приведенным методом и событием?
public static void Print(string msg)
{
tuPush.Add(msg + "\r\r\n");
result = "";
if (tuPush.Count > 10)
{
tuPush.RemoveAt(0);
}
for (int i = 0; i < tuPush.Count; i++)
{
result = result + tuPush[i];
}
textBoxLog.Text = result; //это передаю из формы при старте
}
где то в начале класса формы
public Logger Log { get; }
В конструкторе
Log = new Logger();
Log.ValueChanged += Log_ValueChanged;
public static void Print(string msg)
{
tuPush.Add(msg + "\r\r\n");
result = "";
if (tuPush.Count > 10)
{
tuPush.RemoveAt(0);
}
for (int i = 0; i < tuPush.Count; i++)
{
result = result + tuPush[i];
}
OnValueChanged(result);
}
Кирилл Легенда, Вам виднее. Ваш код. Лично я ничего предосудительного не вижу. Создайте синглтон и используйте его по всему приложению. Правда добавьте на всякий случай блокировку в Print, что бы мусора не было при вызове из разных потоков.