2

方法がありTask.Factory.StartNew(Action<Object> action, Object state)ます。これは一般的に見えます。しかし、私の「行動」が

protected void Edit(MyType myType) { }

なぜ私は持つことができない

MyType x = something;
Task.Factory.StartNew(Edit, x);

私は得る:

引数1:「メソッドグループ」から「System.Action」に変換できません

別のメソッドを追加することで、それを機能させることができます。

protected void Edit(object myType) { Edit((MyType)myType); }

または私は書くことができます

Task.Factory.StartNew(() => Edit(x));

しかし、私はそれを最初の方法で行うことができるはずの何かが欠けているように感じます...

4

2 に答える 2

2

メソッドグループはEditに変換できませんAction<object>。あなたができる

Action<MyType> act = Edit;

Action<MyType>ただし、との間の変換はありませんAction<object>。もしあればあなたはできる

Action<object> act = Edit;
act("abc");
于 2012-08-04T20:22:18.913 に答える
-1

Task.Factory.StartNewのメソッドシグネチャは単一パラメータのAction<>を要求しているため、Action <>インスタンスを作成し、それを呼び出しで使用します。

protected void Edit( Object myType ){ ... }

MyType x = something;
Action<Object> action = new Action<Object>(Edit);
Task.Factory.StartNew( action, x );

また

Task.Factory.StartNew(new Action<Object>(Edit), x);

ラムダを使用してこれをインライン化できる場合もあります(これはあなたが指摘しました):

Task.Factory.StartNew( () => Edit(x) );
于 2012-08-04T19:44:52.637 に答える