0

andreycha почему то пометил предыдущую мою тему как дубликат, хотя решения в "ориджинал" теме для своей проблемы я не нашёл, вроде бы другая ситуация, а если нет, то я всё равно в упор не вижу, что тут нужно сделать.

Есть форма, которая открыта в основном потоке.

В ней вызывается другая форма, но она открывается в новом потоке.

Из этой новой формы вызывается метод другого класса, который изменяет содержимое RichTextBox той форме, в которой вызывался метод.

Ошибка: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'richTextBox1' не из того потока, в котором он был создан."

Вот код функции, которая изменяет содержимое RichTextBox:

public void writeLog(string word, RichTextBox logBox)
{
        logBox.SelectionStart = logBox.TextLength;
        logBox.SelectionLength = 0;
        logBox.SelectionColor = Color.YellowGreen;
        logBox.AppendText(Environment.NewLine + voids.GetTimeNow());
        logBox.SelectionColor = logBox.ForeColor;
        logBox.AppendText(word);
        logBox.SelectionStart = logBox.Text.Length;
        logBox.ScrollToCaret();
}

Вот вызов той функции:

private Voids voids = Voids.GetInstance(); voids.writeLog("Какой то текст", richTextBox1);

А вот так открывается форма в новом потоке:

private void button1_Click(object sender, EventArgs e)
{
            new System.Threading.Thread(() =>
            {
                NewForm();
            }).Start();
}
void NewForm()
{
            Form1 form = new Form1();
            form.ShowDialog();
}
Behavior
  • 149

0 Answers0