Позвольте мне объяснить сценарий.Я ищу маяк с помощью iPhone.Когда маяк обнаружен, я периодически отправляю полученное значение «RSSI» на веб-сервер (длительность 1 секунда).Я делаю это, запуская таймер, когда я получаю «DiscoveredPeripheralCallback».Хотя приведенный ниже метод непрерывно вызывается вначале, после создания экземпляра таймера он останавливается, и теперь выполняется только таймер.Я предполагаю, что что-то, связанное с многопоточностью, вызывает проблему.
Однако, если я закомментирую таймер, все работает нормально, и я получаю непрерывные обратные вызовы на методе делегата, но добавляю таймер и вызываю API внутри, который являетсявызывая некоторые проблемы.
[Export("centralManager:didDiscoverPeripheral:advertisementData:RSSI:")]
public override void DiscoveredPeripheral(CBCentralManager central, CBPeripheral peripheral, NSDictionary advertisementData, NSNumber RSSI)
{
Console.WriteLine("METHOD - 1");
StartTimer();
string DeviceName = peripheral.Name;
discoverdBeacon.AddRawRSSI(RSSI.DoubleValue);
}
Ниже приведен метод таймера, при котором я вызываю API.
private static void StartTimer()
{
// Create a timer with a one second interval.
if (rssiTimer == null)
{
Console.WriteLine("Timer Created");
rssiTimer = NSTimer.CreateRepeatingScheduledTimer(TimeSpan.FromSeconds(1.0), async delegate
{
Console.WriteLine("METHOD - 2");
var result = await SendBeaconDataToServer(179, 0, -81);
Console.WriteLine("Result = " + result);
});
rssiTimer.Fire();
}
}
// Метод API
public static async Task<String> SendBeaconDataToServer(int majorId, int loopId, double rssiValue)
{
List<Peripheral> beaconsArray = new List<Peripheral>();
Peripheral item = new Peripheral();
item.major = majorId; //Keep major values in the range of 178-181
item.minor = loopId;//Keep minor value as zero for now.
item.rssi = rssiValue;
beaconsArray.Add(item);
BeaconInfo info = new BeaconInfo();
info.Panic = true;
info.TagType = true;
info.TagID = 101;
info.Anchors = beaconsArray.ToArray();
var result = await SharedWebClient.Instance.PostUserDetailsDataToServer(info, null);
return result;
}