2

我正在使用.Net Compact Framework 2.0 SP2C#开发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 必须用于与在单独线程上创建的控件进行交互。

发生了什么?

4

2 回答 2

4

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

于 2009-11-30T23:47:59.423 回答
1

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

  1. 列表框1
  2. 列表框2

您只检查了 listBox1 的 InvokeRequired 成员。然而,您实际上最终在 listBox2 最初指向的实例上调用了 .Visible。根据产生的行为,很可能 2 个引用最初指向 2 个不同的ListBox.

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

于 2009-11-30T17:08:36.110 回答