程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Silverlight應用程序之間在客戶端通信

Silverlight應用程序之間在客戶端通信

編輯:C#入門知識

運行在同一台電腦上的多個 Silverlight 應用程序可以通過本地消息進行通信,通信是在客戶端進行的,不需要與服務端交互。使用這一功能可以使在同一頁面承載的多個 Silverlight 應用程序之間或不同頁面承載的 Silverlight 應用程序之間進行通信,在網頁上承載的 Silverlight 應用程序也可以和運行在浏覽器外的其他應用程序之間進行通信。

要在 Silverlight 應用程序之間的通信,需要建一個信息發送程序和一個信息接收程序,發送端使用 LocalMessageSender 來發送信息,接收端使用 LocalMessageReceiver 來接收信息。

信息發送端:

創建發送端時需要提供一個接收端的名稱,同時也可以限定接收端所在的域,如果不提供接收端的域默認為 Global 。

view sourceprint?01 public class MainViewModel : ViewModelBase 

02 { 

03     private LocalMessageSender messageSender; 

04     private const int MAXRETRY = 10; 

05     private int retry = 1; 

06   

07     public string SendResult 

08     { 

09         get; 

10         private set; 

11     } 

12   

13     /// <summary> 

14     /// Initializes a new instance of the MainViewModel class. 

15     /// </summary> 

16     public MainViewModel() 

17     { 

18         SendMessageCommand = new RelayCommand<string>(SendMessage); 

19         messageSender = new LocalMessageSender("receiver1"); 

20         messageSender.SendCompleted += new System.EventHandler<SendCompletedEventArgs>(messageSender_SendCompleted); 

21     } 

22   

23     private void messageSender_SendCompleted(object sender, SendCompletedEventArgs e) 

24     { 

25         if (e.Error != null) 

26         { 

27             if (retry > MAXRETRY) 

28             { 

29                 SendResult = "Could not send message."; 

30                 RaisePropertyChanged("SendResult"); 

31                 return; 

32             } 

33             else 

34             { 

35                 retry++; 

36                 SendMessage(e.Message); 

37             } 

38         } 

39         else 

40         { 

41             retry = 1; 

42             SendResult = string.Concat(e.ReceiverName,":", e.Response); 

43             RaisePropertyChanged("SendResult"); 

44         } 

45     } 

46           

47     public RelayCommand<string> SendMessageCommand { get; private set; } 

48     private void SendMessage(string msg) 

49     { 

50         messageSender.SendAsync(msg); 

51     } 

52 }

使用 SendAsync 方法來發送信息,當信息發送成功時引發 SendCompleted 事件,可以通過 SendCompletedEventArgs 的 Response 屬性來獲取從接收端返回的信息,當信息發送失敗時會拋出 SendFailedException ,可以通過 SendCompletedEventArgs 的 Error 屬性來獲取。

信息接收端:

創建接收端時需要指定接收端的名稱,同時也可以限定該名稱的范圍是限定為全局名稱范圍還是限定為接收方的特定域和限定接收方可從中接收消息的域。接收端的名稱必須在全局范圍內唯一,或者在接收端的宿主域內唯一。

view sourceprint?01 public class MainViewModel : ViewModelBase 

02 { 

03     private LocalMessageReceiver messageReceiver; 

04   

05     public string Message 

06     { 

07         get; 

08         private set; 

09     } 

10   

11     /// <summary> 

12     /// Initializes a new instance of the MainViewModel class. 

13     /// </summary> 

14     public MainViewModel() 

15     { 

16         messageReceiver = new LocalMessageReceiver("receiver1"); 

17         messageReceiver.MessageReceived += new System.EventHandler<MessageReceivedEventArgs>(messageReceiver_MessageReceived); 

18         try 

19         { 

20             messageReceiver.Listen(); 

21         } 

22         catch (ListenFailedException e) 

23         { 

24             Message = e.Message; 

25             RaisePropertyChanged("Message"); 

26         } 

27     } 

28   

29     private void messageReceiver_MessageReceived(object sender, MessageReceivedEventArgs e) 

30     { 

31         e.Response = "Message received."; 

32         Message = e.Message; 

33         RaisePropertyChanged("Message"); 

34     } 

35 }

接收端通過 Listen 方法監聽信息,當收到信息時引發 MessageReceived 事件,可以通過 MessageReceivedEventArgs 的 Message 屬性來獲取接收到的信息,同時可以設置 MessageReceivedEventArgs 的 Response 屬性給發送端返回一個信息。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved