1

我正在使用带有SynchronizationContext对象的回调来从 WCF 服务更新客户端 UI。

我使用的代码模式如下:

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);
}

因为:

  • 它更短
  • 它节省了演员表
  • 无需声明局部变量

虽然它有效,但我想知道第二种方法可能涉及哪些风险。

这被认为是安全的吗?结果参数会被后续调用以某种方式“损坏”吗?

4

1 回答 1

2

这被认为是安全的吗?

是的。因为

结果参数会被后续调用以某种方式“损坏”吗?

No.results是该SetResults()方法本地的,因此尽管它被捕获,但它不能在其他地方重用/拦截。所有可以访问它的代码都在这里可见。

说了这么多,我不认为它比第一个版本有太大的改进。

于 2014-10-16T12:01:23.377 回答