0

Программа: обрабатывает текст (считает слова, и т.д.).

В программе: есть метод, в котором собирается строка:

private void PrintResume()
{
    strText.Append("Первая строка: " + int1 + Environment.NewLine);
    strText.Append("Вторая строка: " + int2 + Environment.NewLine);

    richTextBox2.Text += strText.ToString();
}

И соответственно, richTextBox2, который находится внутри tabPage6.

Работает нормально, за исключением случая, если переключить таб (их несколько, с richTextBox'ами и listview'и). В этом случае программа начинает ругаться, что "попытка доступа к richTextBox2 не из того потока, в котором он был создан". Причем, если переключать на табы с listview, этого не происходит.

В чем тут проблема может быть?

Dmitry D.
  • 3,136
Knst
  • 439
  • Тут что-то другое, по крайней мере в этой формулировке. С чего бы ошибке с потоками проявляться только при переключении вкладок? – Pavel Mayorov Apr 30 '15 at 08:02

1 Answers1

3

Истинную причину проблемы, исключая изложенную в тексте Exception'а, мне назвать сложно.
Я советую попробовать обойти ее, используя следующий код:

if (richTextBox2.InvokeRequired)
    richTextBox2.Invoke(new MethodInvoker(() => { richTextBox2.Text += strText.ToString(); }));
else
    richTextBox2.Text += strText.ToString();

Вместо

richTextBox2.Text += strText.ToString();
Dmitry D.
  • 3,136
  • new MethodInvoker имеет смысл убрать. – Qwertiy Apr 30 '15 at 06:55
  • @Qwertiy у меня без него не компилируется. Неужели у Вас компилируется? – Dmitry D. Apr 30 '15 at 11:12
  • Аргументы в лямбду добавь. (s, e) => – Qwertiy Apr 30 '15 at 12:39
  • @Qwertiy это не помогает, разумеется. Пожалуйста, вооружитесь компилятором и попробуйте сами. – Dmitry D. Apr 30 '15 at 12:47
  • Сорри, (s, e) - это я с событиями перепутал. Но лямбда как-то точно должна передаваться без оборачивания. Попозже проверю. – Qwertiy Apr 30 '15 at 13:45