は、ここに私の拡張メソッドです。 この作品:スレッド・セーフジェネリック拡張メソッドの使用法の構文問題
Action<DataGridView> a = row => row.DataSource = ds.bLog;
this.dataGridView1.Invoke(a);
これはコンパイルされません:
this.dataGridView1.Invoke<DataGridView>(o => o.DataSource = ds.bLog);
とSystem.Windows.Forms.Controlが 'データソース' の定義が含まれていないと言う...
行います私は本当にこれを2行に分割しなければなりませんか? わかりやすいように、汎用拡張メソッドInvokeSafeを呼び出す必要がありますか?
編集:拡張メソッドは、(作品が、私は名前のデリゲートの要件を削除したい)改訂:
private delegate void myDel();
public static void InvokeSafe<T>(this T c, Action<T> DoWhat) where T : Control
{
myDel d = delegate() { DoWhat(c); };
if (c.InvokeRequired)
c.Invoke(d);
else
DoWhat(c);
}
私はに係数アウトmyDel
を作成する方法を見つけ出すように見えることはできませんブロック内の匿名の代理人?
明らかに私はc.Invoke(o => DoWhat(c))で私の匿名の代理人を間違えています。それはコントロールの.Invoke(デリゲート)メソッドを呼び出さず、メソッドを再帰しているからです。 – Maslow