Control.Dispatcher.BeginInvoke里的邏輯由UI線程執行,如果內部包含耗時操作就會造成界面卡住。 Action.BeginInvoke里的邏輯,將在一個新開的線程中執行,而不是UI線程,所以不會造成界面卡住。但其內部不能直接對UI操作,所以若需要訪問UI,需要將訪問UI的那 ...
Control.Dispatcher.BeginInvoke里的邏輯由UI線程執行,如果內部包含耗時操作就會造成界面卡住。
Action.BeginInvoke里的邏輯,將在一個新開的線程中執行,而不是UI線程,所以不會造成界面卡住。但其內部不能直接對UI操作,所以若需要訪問UI,需要將訪問UI的那部分代碼用Control.Dispatcher.BeginInvoke包起來,其中Control屬於你要訪問的UI,或者說Control與你要訪問的UI在同一線程。
示例:
new Action(() => { //耗時非UI操作放這 Control.Dispatcher.Invoke(new Action(() => { //操作UI(同步) })); Control.Dispatcher.BeginInvoke(new Action(() => { //操作UI(非同步) })); //耗時非UI操作放這 }).BeginInvoke(null, null); |