在Silverlight中同步化操作 [英] Syncronizing actions in Silverlight
本文介绍了在Silverlight中同步化操作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要以某种方式同步两个ActionCallbacks ,或者等待他们,然后执行一些代码。
示例:
_model.GetMyTypeList(list =>
{
MyTypeList.AddRange(list);
});
_model.GetStigTypeList(list =>
{
StigTypeList.AddRange(list);
});
doSomethingWhenBothHaveReturned();
我知道我可以使用一个计数器跟踪有多少已经返回,但是没有更好的方式做到这一点?
编辑: user24601有一个很好的答案,但CountdownEvent不存在于silverlight,任何其他好的想法? :
解决方案
使用计数器解决问题我的自我:
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();
}
}
}
usage:
public void method(){
var handler = new ActionWaitHandler(2,OnActionsComplete);
_model.GetMyTypeList(list =>
{
MyTypeList.AddRange(list);
handler .Signal();
});
_model.GetStigTypeList(list =>
{
StigTypeList.AddRange(list);
处理函数.Signal();
});
}
public void OnActionsComplete()
{
dosomething;
}
I have a Silverlight app that uses actions to get data from the model (which again gets the data from WCF services).
I need to somehow sync two ActionCallbacks, or wait for them, and then execute some code.
Example:
_model.GetMyTypeList(list =>
{
MyTypeList.AddRange(list);
});
_model.GetStigTypeList(list =>
{
StigTypeList.AddRange(list);
});
doSomethingWhenBothHaveReturned();
I know I can use a counter to keep track of how many has returned, but is there not a better way to do this?
EDIT: user24601 has a good answer, but CountdownEvent does not exist in silverlight, any other great ideas? :)
解决方案
Solved the problem my self, using a counter:
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();
}
}
}
usage:
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;
}
这篇关于在Silverlight中同步化操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文