private void WorkComplete()

in Hands-on lab/lab-files/starter-project/SmartMeterSimulator/MainForm.cs [203:275]


        private void WorkComplete(Sensor sensor)
        {
            try
            {
                Button button = (Button)pDevices.Controls[sensor.DeviceId];

                if (button.InvokeRequired)
                {   
                    //Use the delegate to get this back onto the main thread
                    UpdateDisplayCallback d = new UpdateDisplayCallback(WorkComplete);
                    Invoke(d, new object[] { sensor });
                }
                else
                {                  
                    //On same thread, pass device data back
                    switch (sensor.State)
                    {
                        case DeviceState.Transmit:
                            //Yellow ball on
                            pStatus.Controls[sensor.StatusWindow].Visible = true;

                            //Set the Sensor's Temperature color on the buildings
                            switch (sensor.TemperatureIndicator)
                            {
                                case SensorState.Cold:
                                    button.BackColor = Color.Blue;
                                    break;
                                case SensorState.Normal:
                                    button.BackColor = Color.Green;
                                    break;
                                case SensorState.Hot:
                                    button.BackColor = Color.Red;
                                    break;
                            }

                            //Update List View of Device Readings
                            string deviceId = sensor.DeviceId.ToString();
                            string currTemp = String.Format("{0:0.0}", sensor.CurrentTemperature);
                            string timeStamp = DateTime.UtcNow.ToString("s"); //sortable DateTimne Format

                            //Add sensor data to the list
                            var item1 = new ListViewItem(new[] { deviceId, currTemp, timeStamp });
                            lvSensorData.Items.Add(item1);
                            break;

                        case DeviceState.Connected:
                            //Yellow Ball visible
                            pStatus.Controls[sensor.StatusWindow].Visible = false;
                            break;
                    }
                    //Pass sensor data to container
                    button.Tag = sensor;

                    //Display any received messages:
                    if (!string.IsNullOrWhiteSpace(sensor.ReceivedMessage))
                    {
                        var item1 = new ListViewItem(new[] { sensor.DeviceId, $"Message: {sensor.ReceivedMessage}", DateTime.UtcNow.ToString("s") });
                        item1.BackColor = Color.Yellow;
                        lvSensorData.Items.Add(item1);
                        sensor.ReceivedMessage = null;
                    }

                    //Loop
                    if(!stopQueue)
                        queue.QueueTask(() => DoWork(sensor));
                }                    
               
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }