在整个程序中调用变量时遇到问题c#

时间:2011-04-26 01:10:04

标签: c# variables global-variables call

我认为这很简单,但我对如何设置变量“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() + "%";                          
    }

2 个答案:

答案 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);