作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个监控我电脑上的东西的应用程序,我想让它比只实现一个 while 循环更难一些。
所以我的问题是,如果我想在单独的线程中获取 cpu 负载,更新类中的静态变量,我该怎么做
namespace threads
{
class Program
{
static int cpuload = 0;
static void Main(string[] args)
{
while (true)
{
Thread th = new Thread(new ThreadStart(CheckCPULoad));
th.Start();
Thread.Sleep(1000); // sleep the main thread
th.Abort();
Console.WriteLine("load: {0}%", cpuload);
}
}
static void CheckCPULoad()
{
// things are updated every 3 secs, dummy data
Thread.Sleep(3000);
Random rnd = new Random();
cpuload++;// = rnd.Next(0, 100); // dummy data
}
}
}
因为它每次都打印“load: 0%”。我需要修复什么才能显示
load: 0%
load: 0%
load: 0%
?
谢谢
最佳答案
为了向主线程“报告”,主线程必须“监听”。这意味着,仍在 while 循环中运行并检查某种队列以查找代表报告的新项目。
您基本上需要的是一个队列,工作线程将在其中放置报告,主线程将定期检查此队列以获取来自工作线程的报告。
您有两种主要方法:
如果您的应用程序是 UI 应用程序,您会自动获得第一种方法,因为这就是 UI 的工作方式。要添加“项目”,您可以使用 Control.BeginInvoke(在 winforms 中)或 Dispatcher.BeginInvoke(在 wpf 中)。
关于c# - 如何将线程 "report back"创建到主线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4537983/
有人可以向我澄清主线 DHT 规范中的声明吗? Upon inserting the first node into its routing table and when starting up th
我正在尝试使用 USB 小工具驱动程序使嵌入式设备作为 MTP 设备工作。 我知道 Android 从大容量存储设备切换到 MTP 设备已经有一段时间了,并且找到了 source code for M
我是一名优秀的程序员,十分优秀!