Control.Invoke在第二次调用时失败

时间:2009-11-30 17:06:27

标签: c# winforms windows-mobile compact-framework invoke

我正在使用 .Net Compact Framework 2.0 SP2 C#开发 Windows Mobile 5.0及以上版本应用程序。

我在方法中有这个代码:

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

当我运行它时,它会在第二个语句(listBox1.Visible = true;)上抛出异常,说:

必须使用Control.Invoke与在单独线程上创建的控件进行交互。

发生了什么事?

2 个答案:

答案 0 :(得分:4)

您的两个ListBox是在不同的线程上创建的。也就是说,几乎在所有情况下,这都是一个非常非常糟糕的主意。

答案 1 :(得分:1)

在这种情况下,有两个ListBox引用的原因

  1. listBox1中
  2. listBox2
  3. 您只检查了listBox1的InvokeRequired成员。但实际上你最终会在listBox2最初指向的实例上调用.Visible。根据结果​​行为,2个引用可能最初指向ListBox的2个不同实例。

    要解决此问题,请检查listBox2上的InvokeRequired,因为那是您实际使用的那个。