Silverlight雜記-本地程序間的互通
只要使用到兩個類一個用來發送一個用來接收。可以有多個發送端,但只能有一個接收端。
來段demo
public partial class localcoon : UserControl {
public localcoon() {
InitializeComponent();
//
_sender = new LocalMessageSender("InAction", LocalMessageSender.Global);
textBox1.TextChanged += (s, e) => {
{
_sender.SendAsync(textBox1.Text);
}
};
}
private LocalMessageSender _sender;
private void button1_Click(object sender, RoutedEventArgs e1) {
//表示兩個基于 Silverlight 的應用程序之間的本地消息傳遞通道的接收端。
LocalMessageReceiver _receive;
_receive = new LocalMessageReceiver("InAction",
ReceiverNameScope.Global, LocalMessageReceiver.AnyDomain);
_receive.Listen();
_receive.MessageReceived += (s, e) => {
textBlock3.Text =
"Message: " + e.Message + Environment.NewLine +
"NameScope " + e.NameScope +
" completed." + Environment.NewLine +
"Response: " + e.Response + Environment.NewLine +
"ReceiverName: " + e.ReceiverName + Environment.NewLine +
//獲取此發送方會將消息發送到的 LocalMessageReceiver 的名稱。
"SenderDomain: " + e.SenderDomain;//獲取此發送方會將消息發送到的 LocalMessageReceiver 的域
};
}
}
public localcoon() {
InitializeComponent();
//
_sender = new LocalMessageSender("InAction", LocalMessageSender.Global);
textBox1.TextChanged += (s, e) => {
{
_sender.SendAsync(textBox1.Text);
}
};
}
private LocalMessageSender _sender;
private void button1_Click(object sender, RoutedEventArgs e1) {
//表示兩個基于 Silverlight 的應用程序之間的本地消息傳遞通道的接收端。
LocalMessageReceiver _receive;
_receive = new LocalMessageReceiver("InAction",
ReceiverNameScope.Global, LocalMessageReceiver.AnyDomain);
_receive.Listen();
_receive.MessageReceived += (s, e) => {
textBlock3.Text =
"Message: " + e.Message + Environment.NewLine +
"NameScope " + e.NameScope +
" completed." + Environment.NewLine +
"Response: " + e.Response + Environment.NewLine +
"ReceiverName: " + e.ReceiverName + Environment.NewLine +
//獲取此發送方會將消息發送到的 LocalMessageReceiver 的名稱。
"SenderDomain: " + e.SenderDomain;//獲取此發送方會將消息發送到的 LocalMessageReceiver 的域
};
}
}
其中一個是IE9 一個是 opera瀏覽器。一些模糊的概念1域。詳見擴展閱讀
“域(Domain)”和“應用程序域(AppDomain)”不是一回事。域表明了Silverlight應用程序的位置信息,諸如:“www.myuniversity.edu.cn”之類,而應用程序域則代表了Silverlight應用程序的運行環境,Silverlight插件在裝載一個Silverlight應用程序時,會為其創建一個應用程序域作為其運行環境。
假設某網頁使用多個<object>元素承載了多個Silverlight應用程序,則Silverlight插件會為每個Silverlight應用程序創建相互獨立的應用程序域,這些Silverlight應用程序的“域”可以相同(只要來源于同一個網站),也可以不同(如果來源于不同的網站)
自定義的時候可以是
Receiver = new LocalMessageReceiver("InAction",
ReceiverNameScope.Global,
new string[] {"www.baidu.com",www.xxx.com});
ReceiverNameScope.Global,
new string[] {"www.baidu.com",www.xxx.com});
如果想指定任意可以是
其最終是調用下面函數發送的
[DllImport("agcore", EntryPoint="LocalMessageSend")]
private static extern uint LocalMessageSendNative
(IntPtr nativePeerPtr, uint cMessage, [MarshalAs(UnmanagedType.LPWStr)] string message,
uint cReceiverName, [MarshalAs(UnmanagedType.LPWStr)] string receiverName,
uint cReceiverDomain, [MarshalAs(UnmanagedType.LPWStr)] string receiverDomain, uint managedKey);
private static extern uint LocalMessageSendNative
(IntPtr nativePeerPtr, uint cMessage, [MarshalAs(UnmanagedType.LPWStr)] string message,
uint cReceiverName, [MarshalAs(UnmanagedType.LPWStr)] string receiverName,
uint cReceiverDomain, [MarshalAs(UnmanagedType.LPWStr)] string receiverDomain, uint managedKey);
全站熱搜