当前位置: 代码迷 >> Silverlight >> Silverlight 应用程序其间在客户端通信
  详细解决方案

Silverlight 应用程序其间在客户端通信

热度:6001   发布时间:2013-02-26 00:00:00.0
Silverlight 应用程序之间在客户端通信

要在 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

  相关解决方案