2011-04-26 3 views
1

이 코드는 매우 간단하지만 변수 "결과"(아래 코드 참조)를 설정하는 방법에 대해 혼란 스럽기 때문에 나중에 프로그램에서 호출 할 수 있습니다. 타이머는 현재 RAM 사용량을 설치된 총 RAM으로 나눈 값으로 사용률을 수집합니다. WMI가 설치된 RAM을 수집하는 방법은 결과 [ "TotalVisibleMemorySize"]를 수행해야하기 때문에 나를 버리게했습니다. 타이머에서 전체 코드 블록을 사용하는 문제는 WMI가 느리기 때문에 카운터를 실제로 지연시키는 2 초마다 새로 고치는 것입니다. 감사!프로그램에서 변수를 호출하는 데 문제가 있음 #

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); 
관련 문제