2010-11-11 52 views
3

可能重複:
MethodInvoker vs Action for Control.BeginInvoke我應該使用MethodInvoker或行動

ThreadPool.QueueUserWorkItem(x => 
     { 
      //get dataset from web service 

      BeginInvoke(new Action(() => { 
       //fill grid 
      })); 

      BeginInvoke(new MethodInvoker(() => { 
       //fill grid 
      })); 
     }); 

在C#中我用配發的MethodInvoker更新從後臺線程的UI 2.0,將它在BeginInvoke下使用時切換到Action是明智的嗎?使用Action更快還是更安全?

+1

我對那些暗示他不使用的人感到困惑。他們使用的是不同於我的C#編譯器嗎?我使我傳遞了從'System.Delegate'派生的東西。請參閱http://stackoverflow.com/questions/253138/anonymous-method-in-invoke-call/253150#253150 – mquander 2010-11-11 16:13:03

+0

一個類似的問題已被問及在這裏回答stackoverflow http://stackoverflow.com/questions/1167771/ methodinvoker-VS-行動對控制的BeginInvoke – Sam 2010-11-11 16:07:49

回答

1

他們都是代表,並在定義(從MSDN抓起)彼此相同:

public delegate void MethodInvoker() 
public delegate void Action() 

所以在IL水平,他們應該是非常一致的。所以我很懷疑你使用哪一個。 Action更具普遍性,更有可能被更多開發人員理解,但MethodInvoker確實具有更具描述性的名稱。選擇一個對你感覺更好的人。

但正如davidsoa指出的那樣,您可以跳過它們並直接使用lambda。

2

它確實沒有什麼區別,因爲兩者都是不帶參數且不返回值的委託類型。但是,在命名語義方面,MethodInvoker是特定於WinForms的,因此應限制在該範圍內。 Action是全功能的,可用於框架的任何區域。

相關問題