Есть форма, которая открыта в основном потоке.
В ней вызывается другая форма, но она открывается в новом потоке.
Из этой новой формы вызывается метод другого класса, который изменяет содержимое 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();
}
BeginInvokeсамое оно. – VladD Aug 08 '17 at 17:37BeginInvokeна чём? Он же создаёт новую форму. Что-то мне кажется, тут другая проблема. – Qwertiy Aug 08 '17 at 17:41