1. 程式人生 > >慎用Application.DoEvents( )

慎用Application.DoEvents( )

如果在UI的訊息處理函式中進行較大量的計算或對介面進行操作,佔用較長時間時可以在中間呼叫Application.DoEvents來響應使用者操作,但不建議這樣做,替代的方法就是在後臺執行緒中進行這些操作,用執行緒池是一個不錯的方法(例如System.Threading.ThreadPool)。

該函式只能在UI的主執行緒中呼叫,不不不要在工作執行緒中呼叫該函式,否則Application.DoEvents可能掛死永不退出,使用reflector反編譯了一下這個函式,發現裡面沒有使用lock之類的執行緒鎖,可能不是執行緒安全的,在MSDN的文件中也沒有說明該函式是執行緒安全的,所以一定不要在多個執行緒中使用它。

一條絕對安全的方法就是:別用它!

具體什麼原因可能導致該函式不退出還沒有研究出來,有空重現一下。