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);
}
}