我有一个简单的WPF应用程序,我在Task
内进行一些处理,并使用Dispatcher.Timer
更新UI的CPU使用率,已用时间和线程数。
Task.Run(() =>
{
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 700);
dispatcherTimer.Start();
}).Wait();
Task process = new Task(() =>
{
sw.Start();
ConvertToGrayscale(sourcePath, destinationPath);
CheckUniqueColorPixels(sourcePath);
});
process.Start();
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
lblElapsedTime.Content = Math.Round(sw.Elapsed.TotalSeconds, 1);
lblCPUUsage.Content = getCPUCounter();
lblThreadCount.Content = Process.GetCurrentProcess().Threads.Count;
}
private double getCPUCounter()
{
double cpuUsage = 0;
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
cpuUsage = Math.Round(cpuCounter.NextValue(), 2);
Task.Delay(1500).ContinueWith(_ =>
{
cpuUsage = Math.Round(cpuCounter.NextValue(), 2);
});
return cpuUsage;
}
这很好用。但是当我使用Parallel.Invoke
Task process = new Task(() =>
{
sw.Start();
Parallel.Invoke(
() => this.ConvertToGrayscaleP(sourcePath, destinationPath),
() => this.CheckUniqueColorPixelsP(sourcePath));
});
process.Start();
我的CPU使用率始终显示100,不断更新,永不更新。我怀疑getCPUCounter()
中存在一些问题,因为其他值(经过时间和线程数)会更新。
我尝试明确使用Thread.Start()
代替Task.Run()
,但这不起作用。
如果我能提供更多详情,请告诉我。
感谢。