多线程成的思想就是有任务需要并行,如果你想不出哪些任务需要并行,那你就不必使用多线程不知道你所谓的下载网页单线程过慢是什么意思,Http请求一般都是单线程的,当然你可以开多个线程,每个线程请求一个页面。这种情况下需要多线程是因为下载数据的任务需要时间,但不能因为下载数据就不处理界面的消息动作,也就是说至少下载数据与界面处理两种任务需要并行。线程同步中都是这样的:B线程要收到A线程的通知,那么必然有B会通过某个方法等待(阻塞),直到A线程给B线程这个通知B才能继续往下执行,但是通常不是只等某一个通知,而是等好几个通知,任意一个通知到达B就进行处理,处理完之后继续等待通知。如果B是主线程,那么等待通知一般是等待消息,调用的方法是GetMessage,它在没消息的时候就阻塞了,有消息B就拿出来处理(有可能是系统给的消息,也有可能是其他线程给的),处理完之后继续等待下一个消息,这就是所谓的消息循环。C#中有SynchronizationContext的Post和Send以及Control的BeginInvoke和Invoke来进行同步,这两个同步都是用消息的方式,Post和BeginInvoke是异步的,意味着不管目标线程是否执行完该方法,Post和BeginInvoke都会马上返回,因此他们一般用于无需返回执行结果的通知,Send和Invoke是同步的,意味着只有目标线程执行完才返回,所以可以拿到执行结果。SynchronizationContext用于各种线程都比较方便,而Control的一般只用于主线程。