余裕がないので、遭遇した現象のメモだけ。
WinFormsのControl.Invoke メソッドでオブジェクトの配列のみを引数に渡すと実行時エラーになってしまいました。
環境はVisuatl Studio 2005SP1上のC#です。
上手く行かない例 §
private delegate void shopBuyMenuInvoker(Item[] sellingItems);
……
formMain.Invoke((shopBuyMenuInvoker)delegate(Item[] sellingItems0)
{
formMain.ShopBuyMenu(sellingItems0);
}, sellingItems);
上手く行く例 (ダミー引数を追加) §
private delegate void shopBuyMenuInvoker(object dummy, Item[] sellingItems);
……
formMain.Invoke((shopBuyMenuInvoker)delegate(object dummy, Item[] sellingItems0)
{
formMain.ShopBuyMenu(sellingItems0);
}, null, sellingItems);
感想 §
public Object Invoke (Delegate method,params Object[] args)の引数argsとの混同が起きているのでしょうか?
ともかく、Invoke+匿名メソッドの組み合わせは罠が多い感じです。
なぜ起こるのか、適切な対処法が何かはまだ分かっていませんが、時間がないのでとりあえず、遭遇現象のメモだけ。