DiskDiff 应用的高级优化与功能实现
1. 线程操作优化
1.1 多线程扫描
为了让应用程序正常运行,扫描操作需要在不同的线程上进行,这样用户界面线程才能继续运行。可以使用System.Threading命名空间中的Thread对象来实现。以下是启动线程的代码:
public void Populate() { Thread t = new Thread(new ThreadStart(DoPopulate)); t.Start(); }线程启动时调用的函数是DoPopulate()。创建新线程时,需要在要调用的函数上创建ThreadStart委托,并将其传递给线程,然后调用线程的Start()方法。
1.2 解决线程与界面更新的问题
当DoTree()函数调用Populate()时,线程会启动并立即返回,然后尝试重绘树状视图。但此时信息还未准备好,会导致问题。为了解决这个问题,可以在DirectoryNode对象中添加一个新事件,当填充函数完成时触发:
void DoPopulate() { DoPopulate(this); OnPopulat