C#: Вызов функции основного потока, изменяющей содержимое контролов из другого потока

356
09 августа 2017, 17:07

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();
}
READ ALSO
Ввод чисел с клавиатуры

Ввод чисел с клавиатуры

ЗдавствуйтеПодскажите, пожалуйста, как сделать диалоговое окно куда пользователь мог бы вводить только числа с клавиатуры?

459
Unity не видит базу данных SQLite

Unity не видит базу данных SQLite

При билде приложения Unity не загружает информацию из базы,однако при запуске приложения внутри самого движка все работает отлично,каким образом...

378
Проверка процессов в цикле while

Проверка процессов в цикле while

Есть 2 процесса игры которые я хочу чекать на запуск:

305