コード例 #1
0
        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}");
        }
コード例 #2
0
        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}");
        }