我认为这很简单,但我对如何设置变量“result”感到困惑(参见下面的代码)所以我可以稍后在程序中调用它,当我希望计时器显示当前的RAM使用量时通过安装的总RAM来收集使用百分比。 WMI收集安装的RAM的方式一直让我失望,因为它必须做结果[“TotalVisibleMemorySize”]。在计时器中拥有整个代码块的问题是它每2秒刷新一次,因为WMI很慢,所以它会真正落后于计数器。谢谢!
private void Form1_Load(object sender, EventArgs e)
{
ObjectQuery wql = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wql);
ManagementObjectCollection results = searcher.Get();
foreach (ManagementObject result in results)
{
label1.Text = Convert.ToInt32(result["TotalVisibleMemorySize"]) + " KB";
}
}
private void timer1_Tick(object sender, EventArgs e)
{
progressBar1.Value = (int)(performanceCounter1.NextValue() - Convert.ToInt32(result["TotalVisibleMemorySize"]));
label1.Text = "Processor Time: " + progressBar1.Value.ToString() + "%";
}
答案 0 :(得分:4)
好吧,你的结果变量在你的Form1_Load方法中。
您需要将其移出该范围,作为Form1的成员,或全局(如Program.cs中)。
我建议不要做全局,但要创建一个私有变量,如:
public class Form1
{
private ManagementObjectCollection results;
... rest of code
}
然后当您需要时,在Form1类的其他位置,您可以使用results.Whatever
答案 1 :(得分:1)
您可以在类中声明私有变量:
private int _totalMemory = 0;
// And in your form load event.
_totalMemory = Convert.ToInt32(result["TotalVisibleMemorySize"])
// And in your timer tick event.
progressBar1.Value = (int)(performanceCounter1.NextValue() - _totalMemory);