2014-10-16 55 views
1

我使用SynchronizationContext對象的回調來更新WCF服務中的客戶端UI。在回調中使用匿名方法時,state參數是否有用?

我使用的代碼圖案如下:

public void SetResults(string callId, IEnumerable<Result> results) 
{ 
    uiSyncContext.Post(new SendOrPostCallback(state => { 
      var r = (IEnumerable<Result>)state; 
      chart1.Series[callId].Points.DataBindXY(r.Select... 
     }, results); 
} 

Post該方法接受委託和狀態對象。沒有其他簽名。

因爲我用的是匿名方法,它發生了,我傾向於寫:

public void SetResults(string callId, IEnumerable<Result> results) 
{ 
    uiSyncContext.Post(new SendOrPostCallback(state => { 
      chart1.Series[callId].Points.DataBindXY(results.Select... 
     }, null); 
} 

因爲:

  • 它是短
  • 它免去鑄造
  • 沒有需求申報本地變量

儘管它有效,但我想知道第二種方法可能涉及哪些風險。

這是否被認爲是安全的?結果參數是否可以通過後續調用以某種方式「損壞」?

回答

2

這是否被認爲是安全的?

是的。因爲

結果參數是否可以通過後續調用以某種方式「損壞」?因此雖然它被捕獲它不能被重新使用/別處截獲

results是本地SetResults()方法。所有可以訪問它的代碼都可以在這裏看到。

說了這麼多,我認爲它沒有比第一個版本有什麼改進。

+0

如果只有一個參數,確定它沒有太大的改進。 Hovewer中,一些回調函數傳遞了更多的參數,對於我直接在匿名函數體中使用它們非常方便。 – Larry 2014-10-16 12:23:42

+0

如果這些回調是強制性的,那麼是的,這可能會有所幫助。但這正是你提出這個問題的原因。 – 2014-10-16 12:51:49

相關問題