C# &引用;输入数组为空";进行调用的跨线程调用时ArgumentException
我有两个独立的线程,有时我需要从另一个线程调用成员。我通过调用的常规方法来实现这一点。以下是基本设置:C# &引用;输入数组为空";进行调用的跨线程调用时ArgumentException,c#,multithreading,invoke,C#,Multithreading,Invoke,我有两个独立的线程,有时我需要从另一个线程调用成员。我通过调用的常规方法来实现这一点。以下是基本设置: void Foo() //On thread 1 { if (this.InvokeRequired) this.Invoke(new Action(Foo2)); else Foo2(); } void Foo2(){/*Do Work*/} //Accesses members on thread 2 我收到错误“Argume
void Foo() //On thread 1
{
if (this.InvokeRequired)
this.Invoke(new Action(Foo2));
else
Foo2();
}
void Foo2(){/*Do Work*/} //Accesses members on thread 2
我收到错误“ArgumentException未处理:输入数组为空”。问题是,我试图调用的方法没有参数,根据文档,这不应该是一个问题
我甚至试着替换:
this.Invoke(new Action(Foo2));
与
(文档中说,如果没有参数,则传递null,我仍然会得到相同的错误)
这是StackTrace的顶部:
位于System.Windows.Forms.Control.MarshaledInvoke(控件调用方、委托方法、对象[]参数、布尔同步)
位于System.Windows.Forms.Control.Invoke(委托方法,对象[]args)
所以,它说数组(对于我假定的参数)是空的,但实际上这是正确的,因为我调用的是一个没有参数的方法。。。这里有什么吸引人的地方?发布Foo2的内容。我有一种感觉,这是另一个线程中发生的异常,在Foo2中,MarshaledVoke只是在重试。另外,转到调试->异常并选中“公共语言运行时异常”框,然后重试。您可能会看到同样的异常出现,但在Foo2内部的某个地方。是的,错误原来是在我从user32调用SendInput时发生的。谢谢
this.Invoke(new Action(Foo2), null);