我正在使用 .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与在单独线程上创建的控件进行交互。
发生了什么事?
答案 0 :(得分:4)
您的两个ListBox是在不同的线程上创建的。也就是说,几乎在所有情况下,这都是一个非常非常糟糕的主意。
答案 1 :(得分:1)
在这种情况下,有两个ListBox
引用的原因
您只检查了listBox1的InvokeRequired成员。但实际上你最终会在listBox2最初指向的实例上调用.Visible。根据结果行为,2个引用可能最初指向ListBox
的2个不同实例。
要解决此问题,请检查listBox2上的InvokeRequired,因为那是您实际使用的那个。