Используйте / вызывайте эту функцию в LogForm.log
(кстати, методы в C # обычно пишутся с большой буквы).
private void SetText(string text)
{
Action set = () => yourTextBox.Text = text;
if (yourTextBox.InvokeRequired)
{
yourTextBox.Invoke(set);
}
else
{
set.Invoke();
}
}
Если это невозможно установить из текущего потока, yourTextBox.InvokeRequired
будет истинным, и функция сработает. В противном случае он просто устанавливает его напрямую.
Вдохновение от этот ответ на возможный дубликат .
Поскольку вы говорите, что проблема сохраняется, я покажу немного больше кода и попытаюсь объяснить его дальше.
Прежде всего, я отредактировал метод SetText
. Я добавил модификатор private, поскольку эта функция не имеет отступа для вызова вне LogForm
. Я также добавил фигурные скобки, так как это мой предпочтительный стиль, и он также гарантирует, что оператор if ведет себя как ожидалось.
public void Log(string message) {
SetText(message);
//do stuff
}
Оба эти метода (Log
и SetText
) находятся внутри класса LogForm
. Теперь вы можете вызывать logForm.Log("Logger has started...");
из любого потока, если ваша форма (содержащая текстовое поле) уже инициализирована. Обычно это происходит в конструкторе, вызывая InitializeComponent();
в первой строке.
Не зная больше о вашем коде, это, вероятно, насколько я могу вам помочь.