Silverlight中跨线程访问的问题
2008-12-23 11:54:21 来源:WEB开发网在silverlight中跨线程访问,不像在winform里有controls.invoke
在里面一般的情况下使用的是Dispather.BeginInvoke
但是本人还发现,用AsyncOperator或者AsynchronazationContext也可以实现上下文的转换
代码如下
Page.xaml
<UserControl x:Class="SilverlightChat.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300">
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="80" />
<RowDefinition Height="80" />
</Grid.RowDefinitions>
<TextBlock x:Name="tblTest" Text="not loaded yet" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Row="0" />
<Button x:Name="btnTest" Content="ClickMe" Height="30" Width="50" Click="btnTest_Click" Grid.Row="1" />
</Grid>
</UserControl>
Page.xaml.cs
using System.Windows.Controls;
using System.Threading;
using System.ComponentModel;
namespace SilverlightChat
{
public partial class Page : UserControl
{
//private SynchronizationContext currentContext;
private AsyncOperation asyncOper;
public Page()
{
InitializeComponent();
asyncOper = AsyncOperationManager.CreateOperation(null);
//this.currentContext = SynchronizationContext.Current;
}
private void btnTest_Click(object sender, System.Windows.RoutedEventArgs e)
{
Thread t = new Thread(new ThreadStart(AcrossThread));
t.Start();
}
private void AcrossThread()
{
asyncOper.Post(result =>
{
tblTest.Text = "HasChanged";
}, null);
//currentContext.Post(result =>
//{
// tblTest.Text = "HasChanged";
//}, null);
}
}
}
从而达到跨线程访问UI的目的
想请问达人。。后面两种访问具体在什么时候才会用的到。。
Tags:Silverlight 线程 访问
编辑录入:爽爽 [复制链接] [打 印]- ››silverlight全屏显示图片
- ››Silverlight MVVM 模式(一) 切近实战
- ››Silverlight for Windows Phone 7开发系列(1):...
- ››Silverlight for Windows Phone 7开发系列(2):...
- ››Silverlight for Windows Phone 7开发系列(3):...
- ››Silverlight for Windows Phone 7开发系列(4):...
- ››Silverlight for Symbian
- ››Silverlight3系列(四)数据绑定 Data Binding 1
- ››线程状态图
- ››访问频率监测有助数据库管理
- ››访问控制大师,使用pam来支持login的访问控制
- ››silverlight2 游戏 1 你能坚持多少秒
更多精彩
赞助商链接