Я пытаюсь показать загрузку процессора и памяти в строке состояния формы MDI. Состояние процессора и памяти работает правильно, если я просто вызываю их с помощью метода. Но теперь я хочу создать таймер, который продолжает обновлять две метки, пока приложение работает:
public System.Threading.Timer MainTimer;
public System.Threading.TimerCallback MainTimerCallback;
private void InitializeTimer()
{
MainTimerCallback = new System.Threading.TimerCallback(MainTimer_Tick);
MainTimer = new System.Threading.Timer(MainTimerCallback,this,0,100);
}
private void MainTimer_Tick(object obj)
{
UpdateSystemDiagnostics();
}
Затем я кодирую это в конструкторе форм MDI:
public MainForm()
{
InitializeComponent();
InitializeSystemDiagnostics();
InitializeTimer();
}
Это код для моей диагностики:
private PerformanceCounter _cpuLoad;
private PerformanceCounter _ramFree;
public float[] SystemDiagnostic = new float[2] { 0, 0 };
private void InitializeSystemDiagnostics()
{
//Diagnostics
_cpuLoad = new PerformanceCounter { CategoryName = "Processor", CounterName = "% Processor Time", InstanceName = "_Total" };
_ramFree = new PerformanceCounter("Memory", "Available MBytes");
}
private void UpdateSystemDiagnostics()
{
SystemDiagnostic[0] = _cpuLoad.NextValue();
SystemDiagnostic[1] = _ramFree.NextValue();
_labelCpuStatus.Text = string.Format("CPU LOAD: ") + string.Format("{0:0.##}%", SystemDiagnostic[0]).PadRight(8);
_labelMemoryStatus.Text = string.Format("FREE MEMORY: {0}MB", SystemDiagnostic[1]);
}
Почему это приводит к закрытию формы, как только я ее открываю? Даже если я нажму «Отладка», он сразу же откроется и закроется!
Также мой другой вопрос: работает ли этот таймер в другом потоке? Если я передам трудоемкую операцию в событие Tick, это приведет к зависанию или заиканию интерфейса?
UPDATE
Когда я ставлю точку останова в этой строке:
_labelCpuStatus.Text = string.Format("CPU LOAD: ") + string.Format("{0:0.##}%", SystemDiagnostic[0]).PadRight(8);
Я заметил, что он работает примерно 2 или 3 раза и обновляет метку, но выходит без предупреждения или исключения!