LocalMessageReceiver:消息接收器类
顾名思义,它们就是所谓消息的“发送方”和“接收方”。
而使用它们也很简单,首先我们要先创建一个Silverlight3 Beta项目,名为:LocalMessage。然后将下面的XAML代码复制到MainPage.xaml文件中:
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
WIDth ="400" Height ="200" >
< StackPanel x:name ="LayoutRoot" Background ="AliceBlue" >
< TextBox
margin ="10"
FontSize ="24"
x:name ="txtMessage" />
< button
Content =" 发 送 "
HorizontalAlignment ="Right"
margin ="10"
Click ="OnSendMessage" />
< TextBlock textwrapPing ="Wrap"
Foreground ="Blue"
FontSize ="12"
x:name ="txtResponse"
HorizontalAlignment ="Center" />
</ StackPanel >
</ UserControl >
{
LocalMessageSender msgSender = new LocalMessageSender( " MessageContact " , " localhost " );
EventHandler < SendCompletedEventArgs > handler = null ;
handler = (s, e) =>
{
dispatcher.BeginInvoke(() =>
{
msgSender.SendCompleted -= handler;
if (e.Error != null )
{
txtResponse.Text = String.Format( " 错误 [{0}] " , e.Error.Message);
}
else
{
txtResponse.Text = String.Format( " 响应 [{0}] " , e.Response == null ? " None " : e.Response);
}
});
};
msgSender.SendCompleted += handler;
msgSender.SendAsync(txtMessage.Text);
}
在上面代码中,先声明一个 LocalMessageSender对象,因为该类的构造方法被重载,支持两个方式,相应参数说明如下:
ReceiverDomain:获取LocalMessageReceiver的域信息(只有指定的域才能获取消息),这主要是解决跨域和安全性问题
这里ReceiverDomain还可使用System.windows.Messaging.LocalMessageSender.Global,这样就设置为Global域了。 在绑定相应的方法(SendCompleted)之后就可发送异步消息了。
接下来介绍一下接收方代码。
首先要先创建一个接收方的Silverlight应用,这里命名为“LocalMessageReceiver”。下面是相应的XAML代码:
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 >
{
List < string > allowedSenderDomains = new List < string > ();
allowedSenderDomains.Add( " silverlightshow.net " );
allowedSenderDomains.Add( " [url]http://www.silverlightshow.net/[/url] " );
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();
}
nameScope: ReceivernameScope.Domain, 该枚举参数用于标识是Domain还是Global。
AllowedSenderDomains: 允许发送的域信息。
因为之前发送方已指定了域信息,即“localhost”,所以这里在列表变量:allowedSenderDomains中添加了“localhost”,并标识以 ReceivernameScope.Domain。 下面我们看一下效果:
当然如果发送方没有采用与接收方相同的Receivername或者发送方的ReceiverDomain未出现在接收方的AllowedSenderDomains列表中,就会出现错误。这一点大家下载源码后运行一下就可以了。 另外就是如果发送方设置的是LocalMessageSender.Global,那么在接收方必须相应是:
ReceivernameScope.Global 这样才能确保信息的传递。 总结
以上是内存溢出为你收集整理的快速浏览Silverlight3 Beta: 在多个Silverlight应用间传递信息全部内容,希望文章能够帮你解决快速浏览Silverlight3 Beta: 在多个Silverlight应用间传递信息所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)