快速浏览Silverlight3 Beta: 在多个Silverlight应用间传递信息
2009-03-31 12:02:06 来源:WEB开发网
ReceiverDomain:获取LocalMessageReceiver的域信息(只有指定的域才能获取消息),这主要是解决跨域和安全性问题
这里ReceiverDomain还可使用System.Windows.Messaging.LocalMessageSender.Global,这样就设置为Global域了。
在绑定相应的方法(SendCompleted)之后就可发送异步消息了。
接下来介绍一下接收方代码。
首先要先创建一个接收方的Silverlight应用,这里命名为“LocalMessageReceiver”。下面是相应的XAML代码:
<UserControl x:Class="LocalMessageReceiver.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="200">
<Grid x:Name="LayoutRoot" Background="Blue" >
<TextBlock
Foreground="White"
FontSize="12"
x:Name="txtMessage"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
</UserControl>
而CS代码如下所示:
void OnLoaded(object sender, RoutedEventArgs args)
{
List<string> allowedSenderDomains = new List<string>();
allowedSenderDomains.Add( "silverlightshow.net" );
allowedSenderDomains.Add( "http://www.silverlightshow.net/" );
allowedSenderDomains.Add("localhost");
//下面使用全命名主要是项目名称与已有的LocalMessageReceiver重名所致
System.Windows.Messaging.LocalMessageReceiver receiver =
new System.Windows.Messaging.LocalMessageReceiver("MessageContact", ReceiverNameScope.Domain, allowedSenderDomains);
receiver.MessageReceived += (s, e) =>
{
e.Response = "接收方收到消息!";
Dispatcher.BeginInvoke(() =>
{
txtMessage.Text = String.Format("收到信息 [{0}]", e.Message);
});
};
receiver.Listen();
}
我们看到这里LocalMessageReceiver类实例实始化参数,其中:
ReceiverName:参见上面的LocalMessageSender
NameScope: ReceiverNameScope.Domain, 该枚举参数用于标识是Domain还是Global。
AllowedSenderDomains: 允许发送的域信息。
因为之前发送方已指定了域信息,即“localhost”,所以这里在列表变量:allowedSenderDomains中添加了“localhost”,并标识以 ReceiverNameScope.Domain。
下面我们看一下效果:
当然如果发送方没有采用与接收方相同的ReceiverName或者发送方的ReceiverDomain未出现在接收方的AllowedSenderDomains列表中,就会出现错误。这一点大家下载源码后运行一下就可以了。
另外就是如果发送方设置的是LocalMessageSender.Global,那么在接收方必须相应是:
ReceiverNameScope.Global
原文链接:http://www.cnblogs.com/daizhj/
Tags:快速 浏览 Silverlight
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接