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); |
博客介绍了C#中两种BeginInvoke的区别。Control.Dispatcher.BeginInvoke里的逻辑由UI线程执行,含耗时操作会使界面卡住;Action.BeginInvoke在新开线程执行,不会卡界面,但内部不能直接操作UI,若需访问UI,要用Control.Dispatcher.BeginInvoke包裹相关代码。
795

被折叠的 条评论
为什么被折叠?



