Silverlight中 非UI线程更新UI 的几种方法

转自 http://m.cnblogs.com/20267/1420156.html?full=1

 

 

Silverlight中 非UI线程更新UI 的几种方法:Delegate, AsyncOperation,BackgroundWorker
首先列一下基础代码:

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    x:Class="Shareach.TestUI.UCThreadUpdate"
    d:DesignWidth="250" d:DesignHeight="120">
<StackPanel>
<TextBlock x:Name="txtCalc" />
</StackPanel>
</UserControl>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Threading;
namespace Shareach.TestUI
{
    public partial class UCThreadUpdate: UserControl
    {
       public UCMsgSend()
       {
              InitializeComponent();
              ThreadUpdate();
       }
       void ThreadUpdate()
       {
             Thread thread = new Thread( new ThreadStart(DoWork));
              thread.Start();
       }
       void DoWork()
       {
              int i=0;
              while(i<100){
                     DoShow(i); 
              }
       }
    }
}

DoShow的三种写法
1. delegate

void DoShow(i){
    this.Dispatcher.BeginInvoke(
                            delegate {
                                   txtCalc.Text = string.format(“result “{0}”,i);
                            });
}

2.AsyncOperation

void DoShow(i){
    //这个可以写成成员变量,我这里只是为了好区分
    System.ComponentModel.AsyncOperation asyncOper = System.ComponentModel.AsyncOperationManager.CreateOperation(null);
    asyncOper.Post(result =>
            {
                txtCalc.Text = string.format(“result “{0}”,i);
            }, null);
}

3.BackgroundWorker

参考 MSDN上的文章

Winform 也一样,

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值