private async void button22_Click(object sender, EventArgs e) { await rfidReader.GetRFCard(null); }
private async Task StartGetRFCard() { CancellationTokenSource cancelTokenSource = new CancellationTokenSource();; CancellationToken token = cancelTokenSource.Token; await Task.Run(async() => { TimerCallback tm = new TimerCallback(TimeOutOperation); System.Threading.Timer timer = new System.Threading.Timer(tm, cancelTokenSource, 10000, 10000); byte res; while (!cancelTokenSource.Token.IsCancellationRequested) { res = await rfidReader.GetRFCard(null); if (res == 0x59) { timer.Change(Timeout.Infinite, Timeout.Infinite); cardDetected = true; ShowInfo("КАТРА ОБНАРУЖЕНА"); break; } } if (!cardDetected) { return; } //Несколько попыток чтения for (int i = 0; i < tryCount; i++) { cardReadInfo = await GetId(); if (cardReadInfo.Item2 == 0x59) { ShowInfo("Подожите..."); await Task.Delay(3000); cardReaded = true; break; } } if (!cardReaded) { return; //карта не прочитана } for (int i = 0; i < tryCount; i++) { if (ParkingApi.CheckCard(cardReadInfo.Item1)) { cardValid = true; ShowInfo("КАТРА ЕСТЬ БАЗЕ"); await Task.Delay(1000); break; } } if (!cardValid) { ShowInfo("КАТРЫ нет БАЗЕ"); await Task.Delay(1000); return; } ; for (int i = 0; i < tryCount; i++) { price = ParkingApi.Get_Price(cardReadInfo.Item1); ShowInfo($"стоимость {price}"); await Task.Delay(1000); inSumm = 0; await Task.Delay(1000); if (price > 0) { ShowInfo($"Внесите {price} руб.\n Внесено {inSumm} руб."); billValidator.SetInhibit(false); //токен отмены для жидания внесения денег //cancelBillTokenSource = new CancellationTokenSource(); // таймер для окончания ожидания приема денег. не вечно же ждать cancelBillAcceptSource = new CancellationTokenSource(); TimerCallback tmBillWait = new TimerCallback(TimeOutBillWait); timerBillWait = new System.Threading.Timer(tmBillWait, cancelBillAcceptSource, 30000, 30000); //запуск цикла приема денег await WaitBills(cancelBillAcceptSource.Token); if ((inSumm - price) >= 0) { var payment = ParkingApi.Payment(cardReadInfo.Item1, price, inSumm - price); if (payment) { ShowInfo($"Платеж принят {payment.ToString()}"); await Task.Delay(1000); } else { ShowInfo($"Платеж не принят {payment.ToString()}"); await Task.Delay(1000); } //сдача ShowInfo($"Сдача {inSumm - price}"); if ((inSumm - price) > 0) { billValidator.DispenceBill(1, 1, 1, 2); } await Task.Delay(5000); } else { //если денег не достаточно и мы вывылились по таймауту то возвращаем деньги //сдача ShowInfo($"Сдача {inSumm}"); } await Task.Delay(1000); break; } } timer.Change(Timeout.Infinite, Timeout.Infinite); } ); }