C#监控和更新

时间:2013-01-20 11:37:46

标签: c# .net

在我的程序(基本任务管理器)中,我监视进程列表,并允许对进程进行更改(例如,终止进程或提高其优先级)。

为了实现它,我按如下方式设计:一个线程是完成所有工作的工作线程,一个线程正在更新GUI中的状态。有一个进程列表,我使用锁来使其成为线程安全的。问题是我正在定期扫描所有进程(例如1秒),同时我无法对列表进行更改,因为另一个线程正在处理它。因此我的程序有时会滞后显示操作

这是一个好设计吗?我该怎么做才能改善它?我想降低间隔值。

1 个答案:

答案 0 :(得分:1)

不要使用共享列表,而应考虑使用工作线程维护的列表,即主列表。完成扫描后,它会将主列表的副本传递给GUI线程。然后,GUI线程能够使用副本中包含的新信息更新GUI,而工作线程可以执行另一次扫描。

这消除了对锁的需要,因为工作线程只是写入一个列表然后创建一个副本(在同一个线程中)。

如果后台工作者能够以比GUI更新更快的速度收集新的进程列表,则会出现这种方法的一个问题。您需要能够在处理先前更新时处理接收新进程列表。