我试图从一个单独的线程中使用 this.Invoke() 来访问我的表单上的控件。我正在调用一个委托,该委托指向一个以字符串 [] 作为参数的方法。
关于我的代表声明的几行:
public delegate void delVoidStringArray(string[] s);
public delVoidStringArray _dLoadUserSelect = null;
_dLoadUserSelect = LoadUsers;
从单独的线程调用委托:
Invoke(_dLoadUserSelect, sUsernames);
和调用的方法与窗体上的控件一起工作
private void LoadUsers(string[] users)
{
//Load the list of users into a ListBox
lstUsers.Items.AddRange(users);
//Load the state of a CheckBox on the form
chkUserAlways.Checked = Properties.Settings.Default.PreferDefaultUser;
}
这通常适用于具有各种参数(字符串、控件、表单和无参数)的其他代表,但每当我调用此 Invoke() 行时,我都会收到错误消息:“参数计数不匹配”。
我认为正在发生的事情是我的字符串数组被装箱到一个对象数组中,并且委托试图将这些字符串作为单独的参数传递给该方法。因此,如果字符串数组有“Bob”、“Sally”和“Joe”,它会尝试将 LoadUsers 调用为
LoadUsers("Bob", "Sally", "Joe");
这显然与签名不匹配。
这听起来像是可能发生的事情吗?我该如何解决这个问题?