在Silverlight中同步化操作 [英] Syncronizing actions in Silverlight

查看:123
本文介绍了在Silverlight中同步化操作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



我需要以某种方式同步两个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆