转自 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>
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);
}
}
}
}
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);
});
}
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);
}
//这个可以写成成员变量,我这里只是为了好区分
System.ComponentModel.Asyncoperation asyncoper = System.ComponentModel.AsyncoperationManager.CreateOperation(null);
asyncoper.Post(result =>
{
txtCalc.Text = string.format(“result “{0}”,i);
},null);
}
3.BackgroundWorker
参考
MSDN上的文章的
Winform 也一样,
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。