Silverlight 应用程序之间在客户端通信
運(yùn)行在同一臺(tái)電腦上的多個(gè) Silverlight 應(yīng)用程序可以通過(guò)本地消息進(jìn)行通信,通信是在客戶端進(jìn)行的,不需要與服務(wù)端交互。使用這一功能可以使在同一頁(yè)面承載的多個(gè) Silverlight 應(yīng)用程序之間或不同頁(yè)面承載的 Silverlight 應(yīng)用程序之間進(jìn)行通信,在網(wǎng)頁(yè)上承載的 Silverlight 應(yīng)用程序也可以和運(yùn)行在瀏覽器外的其他應(yīng)用程序之間進(jìn)行通信。
要在 Silverlight 應(yīng)用程序之間的通信,需要建一個(gè)信息發(fā)送程序和一個(gè)信息接收程序,發(fā)送端使用 LocalMessageSender 來(lái)發(fā)送信息,接收端使用 LocalMessageReceiver 來(lái)接收信息。
信息發(fā)送端:
創(chuàng)建發(fā)送端時(shí)需要提供一個(gè)接收端的名稱(chēng),同時(shí)也可以限定接收端所在的域,如果不提供接收端的域默認(rèn)為 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 方法來(lái)發(fā)送信息,當(dāng)信息發(fā)送成功時(shí)引發(fā) SendCompleted 事件,可以通過(guò) SendCompletedEventArgs 的 Response 屬性來(lái)獲取從接收端返回的信息,當(dāng)信息發(fā)送失敗時(shí)會(huì)拋出 SendFailedException ,可以通過(guò) SendCompletedEventArgs 的 Error 屬性來(lái)獲取。
信息接收端:
創(chuàng)建接收端時(shí)需要指定接收端的名稱(chēng),同時(shí)也可以限定該名稱(chēng)的范圍是限定為全局名稱(chēng)范圍還是限定為接收方的特定域和限定接收方可從中接收消息的域。接收端的名稱(chēng)必須在全局范圍內(nèi)唯一,或者在接收端的宿主域內(nèi)唯一。
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");} }接收端通過(guò) Listen 方法監(jiān)聽(tīng)信息,當(dāng)收到信息時(shí)引發(fā) MessageReceived 事件,可以通過(guò) MessageReceivedEventArgs 的 Message 屬性來(lái)獲取接收到的信息,同時(shí)可以設(shè)置 MessageReceivedEventArgs 的 Response 屬性給發(fā)送端返回一個(gè)信息。
示例代碼下載:SLCommunication
轉(zhuǎn)載于:https://www.cnblogs.com/forgetu/archive/2011/06/30/silverlight-client-side-communication.html
總結(jié)
以上是生活随笔為你收集整理的Silverlight 应用程序之间在客户端通信的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 选项卡TabPanel控件
- 下一篇: datagrid里面某一行双击打开代码