跟你讲一下子线程和委托应该怎么用:
使用子线程,本来就是为了不影响主线程的操作,所以,不要在子线程中把所有事情都委托给主线程来做,你看看你的方法,子线程里面,上来就开始用this.Invoke,而且子线程的操作都在委托里面,也就是相当于子线程的所有操作都委托给主线程来操作了,这样根本没有起到子线程的作用,而你需要做的是,只有界面的操作才用委托,其他的,都不要放在委托里面。
另外,我得指出一下大家的错误,大家都太关注Thread.Sleep了
其实罪魁祸首根本不是它,而是委托使用的方式(或者说,委托使用的位置)
委托很好用,但是千万不要滥用,特别是子线程里全用委托,那多线程就只是个花架子了,都交给主线程来做了,你的子线程还有什么存在的意义呢?那么多操作,那么长时间的操作,委托给主线程来操作,UI能不死吗?
所以,委托要用对了地方,取数运算等操作(包括线程休眠),这些一定要直接写在子线程里面,不要用委托,而子线程里对界面(UI)的操作,一定要(应该说不得不)使用委托,通知主线程来操作。另外,如果子线程里面如果有委托,如果不是必须,千万不要在委托里面加循环,一定要把循环放在委托外面。还有,复杂的界面操作,需要耗时的界面操作,不要放在一个委托里面,可以拆开放在几个委托来做。每个委托最好是要做最小的事情。