2011-04-26 34 views
1

我認爲這很簡單,但我很困惑如何設置變量「result」(請參閱​​下面的代碼),以便稍後在程序中調用它,計時器顯示當前內存使用量除以安裝的內存總量以收集使用率百分比。 WMI收集已安裝的RAM的方式一直在拋棄我,因爲它必須執行結果[「TotalVisibleMemorySize」]。在定時器中存放整塊代碼的問題是,由於WMI速度較慢,因此它每2秒刷新一次,這會嚴重滯後計數器。謝謝!在調用一個變量但不通過程序時出現問題c#

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() + "%";       
    } 

回答

4

那麼,你的結果變量是在Form1_Load方法。

你需要它移到該範圍之外,無論是作爲Form1的一員,還是一個全球性的(在Program.cs中一樣。)

我建議你不這樣做一個全球性的,但創建一個私有變量,如:

public class Form1 
{ 
    private ManagementObjectCollection results; 
... rest of code 
} 

然後,當你需要,在你Form1類中其他地方,你可以使用results.Whatever

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); 
相關問題