c# - c# for loop 在 switch/case 情况下 - 如何?
问题描述
我正在尝试在 c# 中扩展给定的代码,但由于缺乏编程经验,我有点陷入困境。
使用 Visual Studio 社区,我试图通过控制台读出 CPU 核心温度。该代码使用开关/外壳来查找传感器特定名称的外壳,即CPU Core #1并给出温度。对于每个 CPU 核心。拥有 64 个内核,这相当于复制粘贴。我试图实现一个 foreach-situation 但它不起作用。另外我不知道如何在这里设置一个 for 循环。
那是有问题的代码:
if (s.SensorType == LibreHardwareMonitor.Hardware.SensorType.Temperature)
{
if (s.Value != null)
{
float curTemp = (float)s.Value;
switch (s.Name)
{
case "Core Average": //average temps
cpuTemp = curTemp.ToString();
Console.WriteLine(" ... ");
Console.WriteLine(" CPU AVG TEMP: " + cpuTemp);
Console.WriteLine(" ... ");
break;
case "CPU Core #": //Temps for CPU Core #1, CPU Core #2 ...
foreach (s.Name in LibreHardwareMonitor...? ) // <-- no clue what to do here
{
int i = 1;
cpuTemp = curTemp.ToString();
Console.WriteLine(" ... ");
Console.WriteLine(" CPU #" + i +" TEMP: " + cpuTemp);
Console.WriteLine(" ... ");
i++;
}
break;
}
}
}
我被卡住了,不知道如何实现将所有CPU Core#1吐出到CPU Core#64 temps。
这是完整的代码:
private void dataCheck(object StateObj)
{
string cpuTempA = "";
string cpuTemp = "";
string gpuTemp = "";
string gpuLoad = "";
string cpuLoad = "";
string dataUsed = "";
string fanUsed = "";
string cpuClock = "";
//;
StateObjClass State = (StateObjClass)StateObj;
// enumerating all the hardware
foreach (LibreHardwareMonitor.Hardware.IHardware hw in thisComputer.Hardware)
{
Console.WriteLine("HARDWARE: " + hw.HardwareType);
Console.ReadLine();
hw.Update();
// searching for all sensors and adding data to listbox
foreach (LibreHardwareMonitor.Hardware.ISensor s in hw.Sensors)
{
Console.WriteLine("NAME: " + s.Name + ", TYPE: " + s.SensorType + ", VALUE: " + s.Value);
Console.ReadLine();
if (s.SensorType == LibreHardwareMonitor.Hardware.SensorType.Temperature)
{
Console.WriteLine(" FOUND " + s.SensorType);
if (s.Value != null)
{
Console.WriteLine(" FOUND VALUE " + s.Value);
float curTemp = (float)s.Value;
switch (s.Name)
{
case "Core Average":
Console.WriteLine(" FOUND NAME " + s.Name);
cpuTempA = curTemp.ToString();
Console.WriteLine(" ... ");
Console.WriteLine(" CPU AVG TEMP: " + cpuTempA);
Console.WriteLine(" ... ");
break;
case "CPU Core #": //CPU Core #1, CPU Core #2 ...
foreach (s.Name in LibreHardwareMonitor...? )
{
int i = 1;
cpuTemp = curTemp.ToString();
Console.WriteLine(" ... ");
Console.WriteLine(" CPU #" + i +" TEMP: " + cpuTemp);
Console.WriteLine(" ... ");
i++;
}
break;
}
}
}
if (s.SensorType == LibreHardwareMonitor.Hardware.SensorType.Clock)
{
Console.WriteLine(" FOUND " + s.SensorType);
if (s.Value != null)
{
Console.WriteLine(" FOUND VALUE " + s.Value);
float curClock = (float)s.Value;
switch (s.Name)
{
case "CPU Core #4":
Console.WriteLine(" FOUND NAME " + s.Name);
cpuClock = curClock.ToString();
Console.WriteLine(" ... ");
Console.WriteLine(" CPU CLOCK: " + cpuClock);
Console.WriteLine(" ... ");
break;
}
}
}
}
}
}
}
解决方案
谢谢斯蒂芬,它真的很有帮助。非常感谢!
它在我的 4 核家用电脑上运行良好,但还有一个以 CPU Core # 开头的项目,它的数字后面有一个字符串。我需要找到一种方法来过滤掉后者。也许通过将 if 子句限制为 "&& lentgh == 11" 之类的东西?
if (s.Name.StartsWith("CPU Core #"))
{
// int coreid = int.Parse(s.Name.Split('#')[1]);
string coreid = s.Name.Split('#')[1];
coreno = coreid.ToString();
Console.WriteLine(">>>>>>>>>>>>> CORE NUMBER " + coreno + " Temp " + s.Value);
}
凉凉:
NAME: CPU Core #1, TYPE: Temperature, VALUE: 43
>>>>>>>>>>>>> CORE NUMBER 1 Temp 43
NAME: CPU Core #2, TYPE: Temperature, VALUE: 44
>>>>>>>>>>>>> CORE NUMBER 2 Temp 44
NAME: CPU Core #3, TYPE: Temperature, VALUE: 43
>>>>>>>>>>>>> CORE NUMBER 3 Temp 43
NAME: CPU Core #4, TYPE: Temperature, VALUE: 42
>>>>>>>>>>>>> CORE NUMBER 4 Temp 42
NAME: CPU Package, TYPE: Temperature, VALUE: 44
NAME: CPU Core #1 Distance to TjMax, TYPE: Temperature, VALUE: 57
>>>>>>>>>>>>> CORE NUMBER 1 Distance to TjMax Temp 57
NAME: CPU Core #2 Distance to TjMax, TYPE: Temperature, VALUE: 56
>>>>>>>>>>>>> CORE NUMBER 2 Distance to TjMax Temp 56
NAME: CPU Core #3 Distance to TjMax, TYPE: Temperature, VALUE: 57
>>>>>>>>>>>>> CORE NUMBER 3 Distance to TjMax Temp 57
NAME: CPU Core #4 Distance to TjMax, TYPE: Temperature, VALUE: 58
>>>>>>>>>>>>> CORE NUMBER 4 Distance to TjMax Temp 58
推荐阅读
- excel - 每次提交 Microsoft 表单时触发宏
- r - R 正值的滚动计数
- django - 在 AWS ElasticBeanstalk 中阻止 Apache 中的无效 HTTP_HOST 标头
- python - 如何在 Python 中创建自定义数字类
- javascript - 禁用列表和复选框之间的交互
- arrays - Python:在满足条件时查找二维数组中值的行索引
- unity3d - 如何添加事件触发监听器(回调)
- postgresql - PostgreSQL 在 NULL 字段上导入 CSV 失败
- database - Mongodb 在搜索日期范围时在“$lte”(查询或聚合)上有一个错误
- c# - HttpContext 中的 Azure B2C React(前端)+ .net 核心(后端)用户/身份/声明为空