Control.Invoke не удается при втором вызове - PullRequest
2 голосов
/ 30 ноября 2009

Я занимаюсь разработкой Windows Mobile 5.0 и выше приложения с .Net Compact Framework 2.0 SP2 и C # .

У меня есть этот код внутри метода:

if (listBox1.InvokeRequired)
{
    Invoke(new MethodInvoker(
        delegate() { listaBox1 = listaBox2; listBox1.Visible = true; }));
}
else
{
    listBox1 = listBox2;
    listBox1.Visible = true;
}

Когда я запускаю его, он генерирует исключение для второго оператора (listBox1.Visible = true;), говоря:

Control.Invoke должен использоваться для взаимодействия с элементами управления, созданными в отдельном потоке.

Что происходит?

Ответы [ 2 ]

4 голосов
/ 01 декабря 2009

Ваши два списка были созданы в разных темах. Это почти во всех случаях действительно очень плохая идея.

1 голос
/ 30 ноября 2009

Причина, по которой в этом сценарии есть 2 ListBox ссылок

  1. listbox1
  2. listBox2

Вы только проверили члена InvokeRequired для listBox1. Тем не менее, в действительности вы вызываете .Visible для экземпляра, на который изначально указывает listBox2. Исходя из полученного поведения, вероятно, что 2 ссылки первоначально указывали на 2 разных экземпляра ListBox.

Чтобы это исправить, проверьте InvokeRequired на listBox2, так как это тот, который вы фактически используете.

...