1. 程式人生 > >C# Winform時時檢測電腦的CPU使用率和物理內存使用率

C# Winform時時檢測電腦的CPU使用率和物理內存使用率

賦值 proc sso 委托 each delegate () ted 電腦

剛開始我認為可以使用trimer控件就可以實現了,但是使用後才知道,把trimer設置為100微秒時,整個窗體就會不停的在加載中,無法用了= =

這個使用就只能使用線程加載了和委托賦值了

//CPU使用率
GetInfo getinfo = new GetInfo(userPercent,RAM);
Thread th = new Thread(getinfo.threadProcSoft);
th.Start();

// 定義委托類型
delegate void SetTextCallback(String str,String ram);

/// <summary>
/// 委托執行的事件CPU使用率
/// </summary>
public void threadProcSoft()
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_Processor");
string usePre = null;
string ramPre = null;
while (true)
{
foreach (ManagementObject myobject in searcher.Get())
{
usePre = myobject["LoadPercentage"].ToString() + " %";
//lblCPU.Text = myobject["LoadPercentage"].ToString() + " %";
//mheight = Convert.ToInt32(myobject["LoadPercentage"].ToString());
//if (mheight == 100)
// panel3.Height = 100;
//CreateImage();
ramPre = Memory() + "%";
}
this.setText(usePre,ramPre);
Thread.Sleep(300);
}
}

/// <summary>
/// 給CPU的label賦值
/// </summary>
/// <param name="str"></param>
public void setText(String str,String ram)
{
if (lable1.InvokeRequired)
{
// 解決窗體關閉時出現“訪問已釋放句柄”異常
while (lable1.IsHandleCreated == false)
{
if (lable1.Disposing || lable1.IsDisposed) return;
}

SetTextCallback d = new SetTextCallback(setText);
lable1.Invoke(d, new object[] { str,ram });
}
else
{
lable1.Text = str;
}
if (lable2.InvokeRequired)
{
// 解決窗體關閉時出現“訪問已釋放句柄”異常
while (lable2.IsHandleCreated == false)
{
if (lable2.Disposing || lable1.IsDisposed) return;
}

SetTextCallback d = new SetTextCallback(setText);
lable2.Invoke(d, new object[] { str,ram });
}
else
{
lable2.Text = ram;
}
}

C# Winform時時檢測電腦的CPU使用率和物理內存使用率