Silverlight2 beat2 中远程调用异步方法中更新UI

本文介绍在Silverlight2beta2中因线程模型变更导致无法直接更新UI的问题,并提供了一个解决方案,通过保存RootVisual.Dispatcher并使用Dispatcher.BeginInvoke进行异步UI更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在Silverlight2 beta2中由于线程模型的修改,无法向beta1中一样更新UI,包括Alert都不行,原理我这里就不说了,这里提供一个
参考的解决办法,也是参看了一些文章才整出来的,提供个简单的,供大家参考。
    //定义一个静态类成员,具体怎么定义可根据自己需要,
    //我这里只是做个测试的,没有多考虑其他的
    //主要是定义一个静态的Dispatcher在其他地方可以访问
    public class MyDispatcher
    {
        public static Dispatcher MyDp;
    }

    //Application的事件
    private void OnStartup(object sender, StartupEventArgs e)
    {
        this.RootVisual = new Page();
        //一定要在此处把this.RootVisual.Dispatcher保存到某个地方
        //如果想用的时侯在通过this.RootVisual.Dispatcher来访问在异步方法
        //中是访问不到的,根新的线程并发模型有关,不详述
        MyDispatcher.MyDp = this.RootVisual.Dispatcher;
    }

         /// <summary>
        /// Response事件,处理返回结果
        /// </summary>
        /// <param name="asyncResult"></param>
        private void ResponseReady(IAsyncResult asyncResult)
        {
            HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest;
           
            HttpWebResponse response = request.EndGetResponse(asyncResult) as HttpWebResponse;

            if (response.StatusCode == HttpStatusCode.OK)
            {
                using (Stream responseStream = response.GetResponseStream())
                {

                    StreamReader reader = new StreamReader(responseStream);
                    string resultContent = reader.ReadToEnd();
      //注意此处理的调用方式,一定要通过主线程
                    //UI的Dispatcher来调用才能使processResult的逻辑在
                    //主线程的上下文中运行,才能访问主线程的UI元素
                    MyDispatcher.MyDp.BeginInvoke(delegate { ProcessResult(resultContent); });

                }
            }
        }

        private void ProcessResult(string xmlResult)
        {
            //做你自己的处理逻辑,可以正常访问主线程UI元素
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值