For NVIDIA users...
I tried Open Hardware Monitor, and it worked, but sometimes it would get in a state when it was causing high CPU usage while pulling the GPU temperature (this problem would go away if I had it pulling only the CPU temperature).
I ended up using this NuGet package to pull the temperature directly from NVAPI.
https://github.com/falahati/NvAPIWrapper
Some sample code looks like...
PhysicalGPU[] gpus = PhysicalGPU.GetPhysicalGPUs();
foreach (PhysicalGPU gpu in gpus)
{
Console.WriteLine(gpu.FullName);
foreach (GPUThermalSensor sensor in gpu.ThermalInformation.ThermalSensors)
{
Console.WriteLine(sensor.CurrentTemperature);
}
}