Form メソッドを別のスレッドから呼び出そうとしています。フォームクラスには、次のものがあります。
delegate int ReplaceMessageCallback(string msg, int key);
public int ReplaceMessage(string msg, int key)
{
if (this.InvokeRequired)
{
ReplaceMessageCallback amc = new ReplaceMessageCallback(ReplaceMessage);
object[] o = new object[] { msg, key };
return (int)this.Invoke(amc, o);
}
bool found = false;
int rv;
lock (this)
{
if (key != 0)
{
found = RemoveMessage(key);
}
if (found)
{
rv = AddMessage(msg, key);
}
else
{
rv = AddMessage(msg);
}
}
MainForm.EventLogInstance.WriteEntry((found)
? EventLogEntryType.Information
: EventLogEntryType.Warning,
IntEventLogIdent.MessageFormReplace1,
String.Format("MessageForm::ReplaceMessage(({2},{0}) returns {1}.\n\n(The message {3} exist to be replaced.)",
key,
rv,
msg,
(found)
? "did"
: "did not"));
return rv;
}
これを実行すると、「FormatException was unhandled」「Index (zero based) must not greater than zero and equal to the size of the argument list.」という例外が発生します。Invoke の呼び出しで。
基本的に、この同じコード フラグメントは、単一のパラメーターのみを受け取るクラス メソッドで正常に機能するため、オブジェクト配列で何か問題を起こしていると思いますが、何が原因かわかりません。