私は2つの変更を加えるだろうが、それを行うための唯一の方法についてです:
をあなたは再帰呼び出しをしたくない場合は、あなただけの
Invoke()
呼び出しで匿名デリゲートを投げることができ
1)MethodInvokerを使用すると、FuncやActionのキャストは省略できますが、コードを複製しないように再帰を使用することができます。
2)invokeブロックにリターンを追加して、elseブロックを持たないようにします。むしろ余分な字下げをするよりも余分な行を追加したいと思う。第二に
private void SetText(string text)
{
if (textBox1.InvokeRequired)
{
this.Invoke((MethodInvoker) delegate { SetText(text); });
return;
}
this.textBox1.Text = text;
}
あなたがチェックを行うためのアクションをとり、実際のロジックは常にラムダの内側になりますユーティリティメソッドを持っていると考えていました。
private static void InvokeIfRequired(bool required, Action action) {
// NOTE if there is an interface which contains InvokeRequired
// then use that instead of passing the bool directly.
// I just don't remember off the top of my head
if (required) {
this.Invoke((MethodInvoker) delegate { action(); });
return;
}
action();
}
private void SetText(string text)
{
InvokeIfRequired(textBox1.InvokeRequired,() => {
this.textBox1.Text = text;
});
}