silverlight
发布时间:2022-05-04 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了快速浏览Silverlight3 Beta: 在多个Silverlight应用间传递信息,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
概述
在
去年我曾经写过一篇文章,介绍如何在同一页面下多个Silverlight应用间传递事件信息, 当时所使用的技巧就是借助HTML页面元素来传递,当然这种方式也支持向其它第三方ActiveX控 件传递信息。但因为引入了JS代码,让开发者感觉有些别扭。必定这种消息传递写在 CS代码中 会
更容易被接受。 好在Silverlight3 beta中提供了两个重要的类,它们都是以“Loc
在去年我曾经写过一篇文章,介绍如何在同一页面下多个Silverlight应用间传递事件信息,
当时所使用的技巧就是借助HTML页面元素来传递,当然这种方式也支持向其它第三方ActiveX控
件传递信息。但因为引入了JS代码,让开发者感觉有些别扭。必定这种消息传递写在 CS代码中
会更容易被接受。
好在Silverlight3 beta中提供了两个重要的类,它们都是以“Localmessage”打头,其位于
“System.Windows.messaging”名空间下:
LocalmessageSender :消息发送器类
LocalmessageReceiver:消息接收器类
顾名思义,它们就是所谓消息的“发送方”和“接收方”。
而使用它们也很简单,首先我们要先创建一个Silverlight3 Beta项目,名为:Localmessage。
然后将下面的XAML代码复制到MainPage.xaml文件中:
<
UserControl
x:Class
="Localmessage.MainPage"
xmlns
="http://scheR_561_11845@as.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://scheR_561_11845@as.microsoft.com/winfx/2006/xaml"
Width
="400"
Height
="200"
>
<
StackPanel
x:Name
="LayoutRoot"
BACkground
="AliceBlue"
>
<
TextBox
@H_85_57
@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
>
下面是相应的CS代码:
void
OnSendmessage(
object
sender, routedEventArgs args)
{
LocalmessageSender msgSender
=
new
LocalmessageSender(
"
messageContact
"
,
"
localhost
"
);
EventHandler
<
SendCompletedEventArgs
>
handler
=
null
;
handler
=
(s, E)
=>
{
Dispatcher.beginInvoke(()
=>
{
R_561_11845@sgSender.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对象,因为该类的构造方法被重载,支持两个
方式,相应参数说明如下:
receiverName: 接收器名称,因为发送与接收方必须使用相应的ReceiverName,这一点大家可以
想一想我们平时打电话必须拨某一号码才能与某人通信。
receiverDomain:获取LocalmessageReceiver的域信息(只有指定的域才能获取消息),这主要
是解决跨域和安全性问题
这里ReceiverDomain还可使用System.Windows.messaging.LocalmessageSender.Global,这样就
设置为Global域了。
在绑定相应的方法(SendCompleted)之后就可发送异步消息了。
接下来介绍一下接收方代码。
首先要先创建一个接收方的Silverlight应用,这里命名为“LocalmessageReceiver”。下面是
相应的XAML代码:
<
UserControl
x:Class
="LocalmessageReceiver.MainPage"
xmlns
="http://scheR_561_11845@as.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://scheR_561_11845@as.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://files.cnblogs.com/daizhj/LocalMessage.rar。
大佬总结
以上是大佬教程为你收集整理的快速浏览Silverlight3 Beta: 在多个Silverlight应用间传递信息全部内容,希望文章能够帮你解决快速浏览Silverlight3 Beta: 在多个Silverlight应用间传递信息所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。