【发布时间】:2013-05-23 23:11:24
【问题描述】:
我正在尝试从一个单独的线程中使用 this.Invoke() 来访问我的表单上的控件。我正在调用一个委托,该委托指向一个以 string[] 作为参数的方法。
关于我的代表声明的几行:
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");
显然与签名不符。
这听起来像是可能发生的事情吗?我该如何解决这个问题?
【问题讨论】:
-
Invoke() 的第二个参数上的 params 关键字使其模棱两可。它无法判断您是使用单个数组参数还是多个字符串调用它。它假设有多个字符串。
标签: c# arrays winforms delegates