Возникли проблемы с вызовом переменной через программу c # - PullRequest
1 голос
/ 26 апреля 2011

Я думаю, что это очень просто, но я запутался в том, как установить переменную «результат» (см. Код ниже), чтобы я мог вызвать ее позже в программе, когда я хочу, чтобы таймер отображал текущее использование ОЗУ, разделенноепо общей установленной оперативной памяти, чтобы собрать процент использования.То, как WMI собирает установленную оперативную память, сбивает меня с толку, поскольку это должно привести к результату ["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 ]

4 голосов
/ 26 апреля 2011

Итак, ваша переменная результатов находится в вашем методе Form1_Load.

Вам нужно переместить его за пределы этой области, либо как член Form1, либо как глобальный (как в Program.cs.)

Я бы порекомендовал НЕ делать глобальную, а создавать личную переменную, такую ​​как:

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

Тогда, когда вам нужно, в других местах в вашем классе Form1 вы можете использовать results.Whatever

1 голос
/ 26 апреля 2011

Вы можете объявить закрытую переменную внутри класса:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...