#眉標=.NET 3.5、 #副標=.NET Framework 3.5應用開發(3) #大標=PNRP Peer Name登入與登出近端分享 #作者=文/圖 黃嘉輝 ===<反灰>============= public PeerNameResolver() ================ ============= 程式1 // 建立PeerName物件 PeerName peerName = new PeerName(txtPeerName.Text); // 建立PeerNameResolver物件 PeerNameResolver resolver = new PeerNameResolver(); // 將PNRP Peer Name解析為PNRP Peer Name記錄物件 PeerNameRecordCollection pmrcs = resolver.Resolve(peerName); ... foreach (PeerNameRecord pmrc in pmrcs) { foreach (IPEndPoint endpoint in pmrc.EndPointCollection) { lstPeerNameRecord.Items.Add(endpoint); } } ================ ============= 程式2 // 建立PeerNameResolver物件 PeerNameResolver resolver = new PeerNameResolver(); // 宣告非同步解析作業正在執行中所觸發之事件 // 並定義所呼叫的方法為ResolveProgressChangedCallback resolver.ResolveProgressChanged += new EventHandler( ResolveProgressChangedCallback); // 宣告非同步解析作業完成時所觸發之事件 // 並定義所呼叫的方法為ResolveCompletedCallback resolver.ResolveCompleted += new EventHandler( ResolveCompletedCallback); // 非同步將PNRP Peer Name解析為PNRP Peer Name記錄物件 resolver.ResolveAsync(...); ... // 自訂非同步解析作業正在執行中,所呼叫的方法 private void ResolveProgressChangedCallback( object sender, ResolveProgressChangedEventArgs e){ ... } // 自訂非同步解析作業完成時,所呼叫的方法 private void ResolveCompletedCallback( object sender, ResolveCompletedEventArgs e){ ... } ================ ============= 程式3 // 自訂非同步解析作業正在執行中,所呼叫的方法 private void ResolveProgressChangedCallback( object sender, ResolveProgressChangedEventArgs e){ // 取得非同步作業的進度百分比 // 並藉此改變ProgressBar物件的顯示進度 progressBar.Value = e.ProgressPercentage; // 取得PNRP Peer Name記錄物件 PeerNameRecord pnr = e.PeerNameRecord; ... } // 自訂非同步解析作業完成時,所呼叫的方法 private void ResolveCompletedCallback( object sender, ResolveCompletedEventArgs e){ progressBar.Visibility = Visibility.Hidden; ... } ================ ============= 程式4 ================ ============= 程式5 // 命名空間 using System.Net.PeerToPeer.Collaboration; namespace PeopleNearMe { public partial class Window1 : Window { ... private void btnSignIn_Click( object sender, RoutedEventArgs e) { // 登入至Internet之範圍 PeerCollaboration.SignIn(PeerScope.NearMe); } private void btnSignOut_Click( object sender, RoutedEventArgs e) { // 登出近端分享 PeerCollaboration.SignOut(PeerScope.NearMe); } } } ================