代码之家  ›  专栏  ›  技术社区  ›  BuddyJoe

Silverlight方法内的异步操作-返回值

  •  2
  • BuddyJoe  · 技术社区  · 14 年前

    调用异步框架组件的正确方法是什么?等待答案,然后返回值。aka以单个方法包含整个请求/响应。

    示例代码:

        public class Experiment
        {
         public Experiment()
         {
    
         }
            public string GetSomeString()
            {
                WebClient wc = new WebClient();
                wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
                Uri u = new Uri("http://news.google.com/news?pz=1&cf=all&ned=us&hl=en&topic=t&output=rss");
                wc.DownloadStringAsync(u);
                return "the news RSS from Google";
            }
    
            private void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
            {
    
                //don't really see how this callback method makes it able
                // to return the answer I'm looking for on the return
                // statement in the method above.
            }
        }
    

    更多信息 以下内容: 我之所以问这个问题,是因为我有一个我正在研究的项目,我希望浏览器中的javascript代码可以像Web服务和复杂计算和操作的外观/代理那样使用Silverlight。我想同步给西尔维莱特的[脚本成员]打电话。我不希望Silverlight回调到浏览器的javascript中

    2 回复  |  直到 14 年前
        1
  •  1
  •   WiredPrairie    14 年前

    尽管在现代Web应用程序中,使用对Web服务器的同步调用来阻塞UI肯定不是典型的,但是您应该能够通过谨慎地使用 ManualResetEvent .

    基本上,您将导致示例代码中的getSomeString等待( WaitOne ,最好是超时),当下载发生时, 失败 完成 在下载字符串时,您将触发( Set )使GetSomeString中的阻塞方法继续的事件。您需要将下载结果放在与调用者相同的地方,并确保它是线程安全的。

        2
  •  1
  •   Kirk    14 年前

    通常,我从第一个方法返回一个引用对象。然后回调方法通过保留的引用修改对象。警告是,如果对象的属性显示在屏幕上,则确保您在UI线程上。