オブジェクトでコールバックを使用して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);
}
なぜなら:
- 短いです
- キャストを惜しまない
- ローカル変数を宣言する必要はありません
それは機能しますが、2番目のアプローチにはどのようなリスクが伴うのでしょうか.
これは安全と見なされますか? 結果パラメーターは、後続の呼び出しによって何らかの形で「破損」する可能性がありますか?