Silverlight中,处理异步调用 [英] Silverlight, dealing with Async calls

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

问题描述

我有一些code如下:

I have some code as below:

        foreach (var position in mAllPositions)
        {
                 DoAsyncCall(position);
        }
//I want to execute code here after each Async call has finished

那么,如何能做到上面?
我可以做这样的事情:

So how can I do the above?
I could do something like:

        while (count < mAllPositions.Count)
        { 
            //Run my code here
        }

和每个异步调用后增量数由...但是这似乎并不像这样做的一个很好的方式。

and increment count after each Async call is made ... but this doesn't seem like a good way of doing it

有什么建议?有一些设计模式的上述问题,因为我敢肯定,这是一个常见的​​场景?

Any advice? Is there some design pattern for the above problem as i'm sure it's a common scenario?

推荐答案

假设你使用Silverlight和你没有获得信号量,你可能会寻找这样的事情(写在记事本,所以没有承诺以完美的语法):

Given that you're using Silverlight, and you don't have access to Semaphores, you might be looking for something like this (written in notepad, so no promises as to perfect syntax):

int completedCallCount = 0;
int targetCount = mAllPositions.Count;

using (ManualResetEvent manualResetEvent = new ManualResetEvent(false))
{
    proxy.DoAsyncCallCompleted += (s, e) =>
    {
        if (Interlocked.Increment(ref completedCallCount) == targetCount)
        {
            manualResetEvent.Set();
        }
    };

    foreach (var position in mAllPositions)
    {
        proxy.DoAsyncCall(position);
    }

    // This will wait until all the events have completed.
    manualResetEvent.WaitOne();
}

然而,Silverlight的好处之一强迫你异步加载的数据是,你必须努​​力工作,做一个服务呼叫时锁定UI起来,这是你要什么做code这样的,除非你有在后台线程,我强烈建议你做的运行。直到后台进程完成您可以随时显示请稍候消息。

However, one of the benefits of Silverlight forcing you to asynchronously load data is that you have to work hard to lock the UI up when making a service calls, which is exactly what you're going to do with code like this, unless you have it running on a background thread, which I strongly recommend you do. You can always display a "please wait" message until the background process completes.

这篇关于Silverlight中,处理异步调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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