Pergunta

Estou desenvolvendo um Windows Mobile 5.0 e acima aplicação com .Net Compact Framework 2.0 SP2 e C # .

Eu tenho esse código dentro de um método:

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

Quando eu executá-lo, ele lança uma exceção na segunda declaração (listBox1.Visible = true), dizendo:

Control.Invoke deve ser usado para interagir com controles criados em um segmento separado.

O que está acontecendo?

Foi útil?

Solução

Seus dois ListBoxes foram criados em diferentes threads. Ou seja, em quase todos os casos, um muito, muito má ideia.

Outras dicas

A razão por que é que existem 2 referências ListBox neste cenário

  1. listBox1
  2. ListBox2

Você só verificou o membro InvokeRequired para listBox1. No entanto, você realmente acabar chamando .Visible na instância originalmente apontada pelo ListBox2. Com base no comportamento resultante, é provável que os 2 referências apontava originalmente para 2 instâncias diferentes de ListBox.

Para corrigir isso, verifique a InvokeRequired em ListBox2 já que é o que você realmente acabar usando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top