Csharp/C#教程:Silverlight中的同步操作分享


Silverlight中的同步操作

我有一个Silverlight应用程序,它使用操作从模型中获取数据(再次从WCF服务获取数据)。

我需要以某种方式同步两个ActionCallbacks,或等待它们,然后执行一些代码。

例:

_model.GetMyTypeList(list => { MyTypeList.AddRange(list); }); _model.GetStigTypeList(list => { StigTypeList.AddRange(list); }); doSomethingWhenBothHaveReturned(); 

我知道我可以使用计数器来记录已经返回的数量,但有没有更好的方法来做到这一点?

编辑: user24601有一个很好的答案,但在Silverlight,任何其他伟大的想法中不存在CountdownEvent? ?

是的,你需要一个柜台。 “更优雅”的解决方案是使用倒计时事件:

 using (CountDownEvent countDownEvent = new CountDownEvent(2)) { _model.GetMyTypeList(list => { MyTypeList.AddRange(list); countDownEvent.Signal(); }); _model.GetStigTypeList(list => { StigTypeList.AddRange(list); countDownEvent.Signal(); }); countdownEvent.Wait(); doSomethingNowThatWereComplete(); } 

使用计数器解决了我自己的问题:

 public class ActionWaitHandler { private int _count; private readonly Action _callback; public ActionWaitHandler(int count, Action callback) { _count = count; _callback = callback; } public void Signal() { _count--; if (_count == 0) { _callback(); } } } 

用法:

上述就是C#学习教程:Silverlight中的同步操作分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 public void method() { var handler = new ActionWaitHandler(2, OnActionsComplete); _model.GetMyTypeList(list => { MyTypeList.AddRange(list); handler .Signal(); }); _model.GetStigTypeList(list => { StigTypeList.AddRange(list); handler .Signal(); }); } public void OnActionsComplete() { dosomething; } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1014554.html

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐