我正在尝试使我的 C# 应用程序成为多线程的,因为有时,我得到一个异常,说我以不安全的方式调用了一个线程。我以前从未在程序中做过任何多线程,所以如果我对这个问题听起来有点无知,请耐心等待。
我的程序概述是我想做一个性能监控应用程序。这需要使用 C# 中的进程和性能计数器类来启动和监视应用程序的处理器时间,并将该数字发送回 UI。但是,在实际调用性能计数器的 nextValue 方法(由于计时器设置为每秒执行一次)的方法中,我有时会遇到上述异常,它会谈论以不安全的方式调用线程。
我附上了一些代码供您阅读。我知道这是一个耗时的问题,所以如果有人能就在哪里创建新线程以及如何以安全的方式调用它提供任何帮助,我将不胜感激。我尝试查看 MSDN 上的内容,但这让我有点困惑。
private void runBtn_Click(object sender, EventArgs e)
{
// this is called when the user tells the program to launch the desired program and
// monitor it's CPU usage.
// sets up the process and performance counter
m.runAndMonitorApplication();
// Create a new timer that runs every second, and gets CPU readings.
crntTimer = new System.Timers.Timer();
crntTimer.Interval = 1000;
crntTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
crntTimer.Enabled = true;
}
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
// get the current processor time reading
float cpuReading = m.getCPUValue();
// update the current cpu label
crntreadingslbl.Text = cpuReading.ToString(); //
}
// runs the application
public void runAndMonitorApplication()
{
p = new Process();
p.StartInfo.UseShellExecute = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = fileName;
p.Start();
pc = new System.Diagnostics.PerformanceCounter("Process",
"% Processor Time",
p.ProcessName,
true);
}
// This returns the current percentage of CPU utilization for the process
public float getCPUValue()
{
float usage = pc.NextValue();
return usage;
}