Control.Invoke falha em segunda chamada
-
10-07-2019 - |
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?
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
- listBox1
- 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.