Вот некоторые из соответствующих фрагментов Иллюстрируйте, как это используется (вся структура кода была бы слишком сложной).
, так что возьмите следующий класс, AdvertisementHandler :
Код: Выделить всё
internal AdvertisementHandler(ILogger logger)
{
_logger = logger;
_adWatcher = new BluetoothLEAdvertisementWatcher();
_adWatcher.Received += OnAdvertisementReceived;
_adWatcher.Stopped += OnAdvertisementWatcherStopped;
}
internal void StartWatching(CancellationToken token)
{
_cancellationToken = token;
_adWatcher.Start();
}
internal void StopWatching()
{
_adWatcher.Stop();
}
private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs args)
{
if (_cancellationToken.IsCancellationRequested)
{
_logger.LogDebug($"Cancelling device search");
StopWatching();
return;
}
_logger.LogDebug($"Received an advertisement");
// Properly handle the advertisement.
< /code>
Затем в отдельном классе у меня есть что -то вроде ... < /p>
private void DetectNewDevices()
{
try
{
_cancellationSource = new CancellationTokenSource(TimeSpan.FromSeconds(120));
_logger.LogDebug($"Looking for new {deviceName} devices");
_adHandler.StartWatching(_cancellationSource.Token);
Thread.Sleep(250);
}
catch (Exception ex)
{
_logger.LogException(ex);
}
}
public bool ChooseDevice(IDeviceInstance deviceInstance)
{
if (_cancellationSource != null)
{
_logger.LogDebug("Choosing A device so cancelling search.");
_cancellationSource.Cancel();
}
// Do some other stuff.
}
Код: Выделить всё
ReceivedОбратите внимание, что это не просто потому, что Потребовалось задолго до того, как этот обработчик событий был назван в следующий раз - я получил много рекламных объявлений в то же время (то есть «Полученная реклама» появляется в журнале) и даже поместил там точку останова и увидел, что IscancellationRequested является ложным Полем В конце концов это изменяется на True, но почему бы не мгновенно после вызова cancel () ? это просто причуда этой структуры.
Подробнее здесь: https://stackoverflow.com/questions/794 ... ter-cancel
Мобильная версия