我正在编写一个在后台运行许多线程的应用程序,这些线程必须向主线程报告,以便它可以更新界面中的表。过去,工作线程是普通的独立类(名为 Citizen),我使用类似的东西从主线程运行
new Thread(new ThreadStart(citizen.ProcessActions)).Start();
其中 ProcessActions 函数是完成所有后台工作的主要函数。在实际启动线程之前,我会注册事件处理程序,以便 Citizen 线程可以将一些内容记录/报告到接口。通常,有数十个这样的 Citizen 线程(大约 50 个)并且它们是相当大的类 - 每个都有自己的 HTTP 客户端并浏览 Web。
这是管理线程的好方法吗?坦率地说,可能不会;我很确定线程没有优雅地退出——一旦 ProcessActions 函数完成,我删除事件处理程序就是这样——内存使用量随着每个新公民的启动而不断上升。
管理许多(50 多个)线程的最佳方式是什么,您必须经常与之通信?我相信我不必担心 Citizen 变量的线程安全性,因为我不会从其他线程访问它们,但它是自己的线程。