Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 第二次调用时调用失败_C#_Winforms_Windows Mobile_Compact Framework_Invoke - Fatal编程技术网

C# 第二次调用时调用失败

C# 第二次调用时调用失败,c#,winforms,windows-mobile,compact-framework,invoke,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 = listBox

我正在用.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;说:

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


发生了什么?

为什么在这个场景中有两个列表框引用

列表框1 列表框2 您只检查了listBox1的InvokeRequired成员。但实际上,您最终调用了listBox2最初指向的实例上的.Visible。根据结果行为,这两个引用很可能最初指向ListBox的两个不同实例


要解决此问题,请检查listBox2上所需的InvokerRequired,因为这是您最终实际使用的

您的两个列表框是在不同的线程上创建的。这几乎在所有情况下都是一个非常非常糟糕的主意。

虽然我认为你基本上是对的,但这并不能解释为什么listBox2位于listBox1之外的另一个线程上,因为两者似乎是同一表单的一部分,应该位于单个线程上。能否在不同于父线程的线程上创建控件?这将修改控件属性,毕竟…有一个线程加载数据以在listBox上显示它。列表框是自定义控件。我收到很多错误消息。必须使用调用。。。如果我直接将数据加载到listBox1。这就是为什么有两个列表框的原因。@OregonGhost-是的,一个可以在其他线程上创建控件,规则是相同的:与控件的所有交互(调用InvokeRequired除外)都应该在创建线程上。它需要一些其他条件来保持,例如listBox1从未显示。您应该使用BeginInvoke,不调用,以防止死锁。