6

別のスレッドから 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");

これは明らかに署名と一致しません。

これは起こり得ることのように聞こえますか?この問題を回避するにはどうすればよいですか?

4

2 に答える 2