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

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

Winform 也一样,

原文地址:https://www.cnblogs.com/Areas/p/2193361.html