要在 Silverlight 应用程序之间的通信,需要建一个信息发送程序和一个信息接收程序,发送端使用 LocalMessageSender 来发送信息,接收端使用 LocalMessageReceiver 来接收信息。
信息发送端:java-javascript.blogcn.com
创建发送端时需要提供一个接收端的名称,同时也可以限定接收端所在的域,如果不提供接收端的域默认为 Global 。
public class MainViewModel : ViewModelBase
{
private LocalMessageSender messageSender;
private const int MAXRETRY = 10;
private int retry = 1;
public string SendResult
{
get;
private set;
}
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel()
{
SendMessageCommand = new RelayCommand<string>(SendMessage);
messageSender = new LocalMessageSender("receiver1");
messageSender.SendCompleted += new System.EventHandler<SendCompletedEventArgs>(messageSender_SendCompleted);
}
private void messageSender_SendCompleted(object sender, SendCompletedEventArgs e)
{
if (e.Error != null)
{
if (retry > MAXRETRY)
{
SendResult = "Could not send message.";
RaisePropertyChanged("SendResult");
return;
}
else
{
retry++;
SendMessage(e.Message);
}
}
else
{
retry = 1;
SendResult = string.Concat(e.ReceiverName,":", e.Response);
RaisePropertyChanged("SendResult");
}
}
public RelayCommand<string> SendMessageCommand { get; private set; }
private void SendMessage(string msg)
{
messageSender.SendAsync(msg);
}
}
使用 SendAsync 方法来发送信息,当信息发送成功时引发 SendCompleted 事件,可以通过
SendCompletedEventArgs 的 Response 属性来获取从接收端返回的信息,当信息发送失败时会抛出
SendFailedException ,可以通过 SendCompletedEventArgs 的 Error 属性来获取。
信息接收端:
创建接收端时需要指定接收端的名称,同时也可以限定该名称的范围是限定为全局名称范围还是限定为接收方的特定域和限定接收方可从中接收消息的域。接收端的名称必须在全局范围内唯一,或者在接收端的宿主域内唯一。
public class MainViewModel : ViewModelBase
{
private LocalMessageReceiver messageReceiver;
public string Message
{
get;
private set;
}
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel()
{
messageReceiver = new LocalMessageReceiver("receiver1");
messageReceiver.MessageReceived += new System.EventHandler<MessageReceivedEventArgs>(messageReceiver_MessageReceived);
try
{
messageReceiver.Listen();
}
catch (ListenFailedException e)
{
Message = e.Message;
RaisePropertyChanged("Message");
}
}
private void messageReceiver_MessageReceived(object sender, MessageReceivedEventArgs e)
{
e.Response = "Message received.";
Message = e.Message;
RaisePropertyChanged("Message");
}
}
接收端通过 Listen 方法监听信息,当收到信息时引发 MessageReceived 事件,可以通过
MessageReceivedEventArgs 的 Message 属性来获取接收到的信息,同时可以设置
MessageReceivedEventArgs 的 Response 属性给发送端返回一个信息。java
分享到:
相关推荐
一个简单的示例,显示了Silverlight客户端和Java应用程序之间的通信。
IsolatedStorageSettings.ApplicationSettings - 按应用程序保存的 key-value 字典表 15、Silverlight(17) - 2.0数据之详解DataGrid, 详解ListBox 介绍 Silverlight 2.0 详解DataGrid, 绑定数据到ListBox: ...
第iii部分 智能客户端应用程序第14章 windows窗体 543 14.1 system.windows.forms名称空间 543 14.2 窗体的使用 544 14.2.1 设置启动窗体 544 14.2.2 通过sub main显示窗体 545 14.2.3 application类的更...
为了改善企业资产管理(EAM)系统在用户体验、模块间数据传输效率及耦合度等方面的不足,构建了基于Silverlight与...客户端Silverlight应用程序通过代理调用WCF服务,提高了数据传输效率,降低了系统模块间的耦合性。
WPF可以编写Web程序或者桌面应用程序,可以直接编译为独立运行的.Exe文件。WPF运行时必须安装.net Framework 3.0。这就要求WPF目前运行的操作系统必须是Windows Vista或者Windows XP SP2。 此外,SilverLight作为...
应用程序域和进程级别的隔离能够满足你大部分的宿主场景; 内置的 SSL/TLS 加密支持; 会话级别的发送队列能够让你通过会话并发的发送数据,并保持高性能和可控性; SuperSocket 的命令处理模式让你的业务逻辑更清晰,...
Activity Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,是一个负责与用户交互的组件 SSH 为 Struts+Spring+Hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。...