C# Dispatcher Invoke 和正常代码执行顺序
Posted
技术标签:
【中文标题】C# Dispatcher Invoke 和正常代码执行顺序【英文标题】:C# Dispatcher Invoke and normal code execution order 【发布时间】:2021-04-14 04:29:58 【问题描述】:我对@987654321@ 究竟是如何工作的有一些疑问。这更像是一个理论问题(我没有用这种方式编写的任何代码)。
假设我有这个代码:
Application.Current.Dispatcher.Invoke( () => func1() );
func2();
Application.Current.Dispatcher.Invoke( () => func3() );
func4();
据我了解,func1()
保证在func3()
之前执行。 (和func2()
在func4()
之前)。
但是被调用的函数(1和3)和普通函数(2和4)是什么关系呢?
由于调用的函数是在它们的线程上执行的,我想实际上并没有关系:例如,func1()
可能在func2()
之前或之后执行,具体取决于线程可用性。
但我想func3()
将始终在func2()
之后执行,因为它是在它之后启动的。
我还认为某些函数可能在不同的线程上重叠执行。
这是正确的吗?还是我理解错了?
【问题讨论】:
【参考方案1】:根据documentation:
Invoke
是同步操作;因此,直到回调返回后,控制才会返回到调用对象。
因此,您示例中的func1()
、func2()
、func3()
和func4()
方法将按此顺序调用,顺序且不重叠。
【讨论】:
以上是关于C# Dispatcher Invoke 和正常代码执行顺序的主要内容,如果未能解决你的问题,请参考以下文章
等待 Dispatcher.InvokeAsync 与 Dispatcher.Invoke
Application.Current.Dispatcher.BeginInvoke(action) VS。 Application.Current.Dispatcher.Invoke(action)