我发现很少有关于如何让OHM在c#
中工作的例子using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenHardwareMonitor.Hardware;
namespace OpenHardwareMonitorReport
{
class Program
{
static void Main(string[] args)
{
Computer computer = new Computer();
computer.Open();
var temps = new List<decimal>();
foreach (var hardware in computer.Hardware)
{
if (hardware.HardwareType != HardwareType.CPU)
continue;
hardware.Update();
foreach (var sensor in hardware.Sensors)
{
if (sensor.SensorType != SensorType.Temperature)
{
if (sensor.Value != null)
temps.Add((decimal)sensor.Value);
}
}
}
foreach (decimal temp in temps)
{
Console.WriteLine(temp);
}
Console.ReadLine();
}
}
}
这应该显示一些传感器数据,但是当我运行它时会给我这个错误:
托管调试助手'PInvokeStackImbalance'在'C:\ Users \ Josh \ Desktop \ DLLTutorial \ HardwareMonitor \ HardwareMonitor \ bin \ Debug \ HardwareMonitor.vshost.exe'中检测到问题。 附加信息:调用PInvoke函数'PInvokeDelegateFactoryInternalAssembly!PInvokeDelegateFactoryInternalWrapperType13 :: ADL_Main_Control_Create'使堆栈失去平衡。这很可能是因为托管PInvoke签名与非托管目标签名不匹配。检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配。
我从OHM svn下载了.dll,把它放在我的项目中,添加了对它的引用,它在“computer.Open();”行崩溃了我在上面发布了这个错误。
请帮忙!
答案 0 :(得分:1)
显然我的设置存在问题。它在其他系统上没有失败......当你发生这种情况时,你是不是讨厌它。