このリンクのコードでは、http://c-sharp-programming.blogspot.com/2008/07/cross-thread-operation-not-valid.htmlでは、デリゲートを使用してテキストボックスの値をワーカースレッドから更新しています。デリゲートの呼び出しの構文を説明します。C#
私は基本的に何が起こっているか見ますが、特にこの行の構文ができます。
label1.Invoke(del, new object[] { newText });
は私に混乱しています。誰かがそれを説明できますか?パラメータが1つだけの場合、デリゲートに新しいオブジェクト配列構文を使用するのはなぜですか?
全コード:
delegate void updateLabelTextDelegate(string newText);
private void updateLabelText(string newText)
{
if (label1.InvokeRequired)
{
// this is worker thread
updateLabelTextDelegate del = new updateLabelTextDelegate(updateLabelText);
label1.Invoke(del, new object[] { newText });
}
else
{
// this is UI thread
label1.Text = newText;
}
}
間違いですが、label1.Invoke()はデリゲートではありません。 'label1.Invoke(del、newText);と書いてください。 –
彼はlabel1.Invoke()がデリゲートだと言っていましたか?私はそれを読まなかった。また、paramsのおかげで、明示的なオブジェクトなしで単一のparamを使用することができます。 – payo