PeerWatcher.Updated 事件
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
發生于無線範圍內對等應用程式的 DisplayName 或 DiscoveryData 已變更時。
// Register
event_token Updated(TypedEventHandler<PeerWatcher, PeerInformation const&> const& handler) const;
// Revoke with event_token
void Updated(event_token const* cookie) const;
// Revoke with event_revoker
PeerWatcher::Updated_revoker Updated(auto_revoke_t, TypedEventHandler<PeerWatcher, PeerInformation const&> const& handler) const;
public event TypedEventHandler<PeerWatcher,PeerInformation> Updated;
function onUpdated(eventArgs) { /* Your code */ }
peerWatcher.addEventListener("updated", onUpdated);
peerWatcher.removeEventListener("updated", onUpdated);
- or -
peerWatcher.onupdated = onUpdated;
Public Custom Event Updated As TypedEventHandler(Of PeerWatcher, PeerInformation)
事件類型
Windows 需求
應用程式功能 |
proximity
|
備註
當對等應用程式的 DisplayName 或 DiscoveryData 變更時,就會引發 Updated 事件。 您可以使用 Id 屬性來唯一識別對等應用程式並更新 UI。
重要
對於 Windows Phone 8.x 應用程式,從更新事件處理常式內呼叫PeerFinder.ConnectAsync將會失敗。 相反地,在這個事件處理常式之外呼叫它,例如,當使用者明確選擇連線到對等時。
private PeerWatcher _peerWatcher;
private bool _peerWatcherIsRunning = false;
private bool _peerFinderStarted = false;
// The list of peers discovered by the PeerWatcher.
ObservableCollection<PeerInformation> _discoveredPeers = new ObservableCollection<PeerInformation>();
void PeerFinder_StartPeerWatcher(object sender, RoutedEventArgs e)
{
if (!_peerFinderStarted)
{
// PeerFinder must be started first.
return;
}
if (_peerWatcherIsRunning)
{
// PeerWatcher is already running.
return;
}
try
{
if (_peerWatcher == null)
{
_peerWatcher = PeerFinder.CreateWatcher();
// Add PeerWatcher event handlers. Only add handlers once.
_peerWatcher.Added += PeerWatcher_Added;
_peerWatcher.Removed += PeerWatcher_Removed;
_peerWatcher.Updated += PeerWatcher_Updated;
_peerWatcher.EnumerationCompleted += PeerWatcher_EnumerationCompleted;
_peerWatcher.Stopped += PeerWatcher_Stopped;
}
// Empty the list of discovered peers.
_discoveredPeers.Clear();
// Start the PeerWatcher.
_peerWatcher.Start();
_peerWatcherIsRunning = true;
}
catch (Exception ex)
{
// Exceptions can occur if PeerWatcher.Start is called multiple times or
// PeerWatcher.Start is called the PeerWatcher is stopping.
}
}
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
if (_peerWatcher != null)
{
// Remove event handlers.
_peerWatcher.Added -= PeerWatcher_Added;
_peerWatcher.Removed -= PeerWatcher_Removed;
_peerWatcher.Updated -= PeerWatcher_Updated;
_peerWatcher.EnumerationCompleted -= PeerWatcher_EnumerationCompleted;
_peerWatcher.Stopped -= PeerWatcher_Stopped;
_peerWatcher = null;
}
}
private void PeerWatcher_Updated(PeerWatcher sender, PeerInformation peerInfo)
{
var ignored = Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
lock (this)
{
// Find and update the peer in the list of discovered peers.
for (int i = 0; i < _discoveredPeers.Count; i++)
{
if (_discoveredPeers[i].Id == peerInfo.Id)
{
_discoveredPeers[i] = peerInfo;
}
}
}
});
}