ошибка перекрестных операций - PullRequest
0 голосов
/ 16 мая 2009
      if (listBox1.InvokeRequired)
       {
           listBox = new StringBuilder(this.listBox1.Text);
       }

Это код в c #, который при выполнении выдает недопустимую ошибку операции кросс-потока для listBox1, который является списком в моей форме. Ребята, скажите, пожалуйста, почему? Я тоже использую метод invokeRequired и тоже не изменяю содержимое списка.

Ответы [ 3 ]

5 голосов
/ 16 мая 2009

InvokeRequired говорит только о том, что Invoke необходим для правильного доступа к элементу. Это не делает доступ легальным. Вы должны использовать метод invoke, чтобы отправить обновление в соответствующий поток

Action update = () => listbox = new StringBuilder(this.listBox1.Text);
if (listBox1.InvokeRequired) {
  listBox1.Invoke(update);
} else {
  update();
}
3 голосов
/ 16 мая 2009

InvokeRequired просто проверяет, требуется ли Invoke. Вы обнаружили, что это необходимо, но не вызывали Invoke!

2 голосов
/ 16 мая 2009

Ваш код должен работать, когда InvokeRequired имеет значение false

delegate void SetListBoxDelegate(); 

void SetListBox()
{
    if(!InvokeRequired)
    {
        listBox = new StringBuilder(this.listBox1.Text);
    } 
    else 
        Invoke(new SetListBoxDelegate(SetListBox)); 
} 

Edit: Проверьте Обеспечение безопасности Windows Forms

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...