private void GenerateQueueInFrontOfStadium(int capacityStadium) { _logger.WriteProtocol("started", $"queue in front of stadion", $"{Task.CurrentId}"); int hasTicket = 0; for (int i = 0; i < capacityStadium * 2 && hasTicket < capacityStadium; i++) { bool flagTicket = false; if (i % 2 == 0) { flagTicket = true; hasTicket++; } Fan fan = new Fan(flagTicket); _bagInFrontOfTheStadium.Add(fan); _context.Send( //Метод работает синхронно, текущий поток дождется его завершения //Post будет работать асинхронно, текущий поток его не ждет state => { tBlockQueueBeforeStadium.Text = _bagInFrontOfTheStadium.Count.ToString(); }, null ); } _logger.WriteProtocol("finished", $"queue in front of stadion", $"{Task.CurrentId}"); }
private void FillingSectors(int numberOfSector) { _logger.WriteProtocol("started", $"filling sectors,{numberOfSector}", $"{Task.CurrentId}"); TextBlock ref_textBlock = null; ListBox ref_listbox = null; BlockingCollection <Fan> ref_BagFillingTheSector = null; switch (numberOfSector) { case 1: { ref_BagFillingTheSector = _bagFillingTheSector1; ref_textBlock = tBlockBusyPlacesSecotr1; ref_listbox = lBoxSector1; break; } case 2: { ref_BagFillingTheSector = _bagFillingTheSector2; ref_textBlock = tBlockBusyPlacesSecotr2; ref_listbox = lBoxSector2; break; } case 3: { ref_BagFillingTheSector = _bagFillingTheSector3; ref_textBlock = tBlockBusyPlacesSecotr3; ref_listbox = lBoxSector3; break; } case 4: { ref_BagFillingTheSector = _bagFillingTheSector4; ref_textBlock = tBlockBusyPlacesSecotr4; ref_listbox = lBoxSector4; break; } case 5: { ref_BagFillingTheSector = _bagFillingTheSector5; ref_textBlock = tBlockBusyPlacesSecotr5; ref_listbox = lBoxSector5; break; } case 6: { ref_BagFillingTheSector = _bagFillingTheSector6; ref_textBlock = tBlockBusyPlacesSecotr6; ref_listbox = lBoxSector6; break; } } while (_queueInFrontOfTheSectors.IsCompleted != true && ref_BagFillingTheSector.Count != 10000) { Thread.Sleep(1); Fan tmpFan = null; _queueInFrontOfTheSectors.TryTake(out tmpFan, 100, _cts.Token); if (tmpFan != null && tmpFan.NumberOfSector == numberOfSector) { ref_BagFillingTheSector.Add(tmpFan); _context.Send( //Метод работает синхронно, текущий поток дождется его завершения //Post будет работать асинхронно, текущий поток его не ждет state => { ref_textBlock.Text = ref_BagFillingTheSector.Count.ToString(); ref_listbox.Items.Add(tmpFan.NumberOfPlace.ToString()); tBlockQueueBeforeSectors.Text = (_queueInFrontOfTheSectors.Count.ToString()); tBlockFansOnTheirPlaces.Text = (_bagFillingTheSector1.Count + _bagFillingTheSector2.Count + _bagFillingTheSector3.Count + _bagFillingTheSector4.Count + _bagFillingTheSector5.Count + _bagFillingTheSector6.Count).ToString(); }, null ); } else if (tmpFan != null) { _queueInFrontOfTheSectors.Add(tmpFan); } } _logger.WriteProtocol("finished", $"filling sectors,{numberOfSector}", $"{Task.CurrentId}"); }