问题描述
我对 dispatcher.Invoke
的具体工作原理有些怀疑。这更像是一个理论问题(我没有任何以这种方式编写的代码)。
Application.Current.dispatcher.Invoke( () => func1() );
func2();
Application.Current.dispatcher.Invoke( () => func3() );
func4();
据我了解,func1()
保证在 func3()
之前执行。 (以及 func2()
之前的 func4()
)。
但是被调用的函数(1 和 3)与普通函数(2 和 4)之间的关系是什么?
由于调用的函数是在它们的线程上执行的,所以我认为实际上没有关系:例如,func1()
可能在 func2()
之前或之后执行,这取决于线程的可用性。
但我想 func3()
将始终在 func2()
之后执行,因为它是在它之后启动的。
我还认为某些函数可能在不同的线程上重叠执行。
这是正确的吗?还是我理解错了?
解决方法
Invoke
是同步操作;因此,直到回调返回后,控制才会返回到调用对象。
因此,示例中的 func1()
、func2()
、func3()
和 func4()
方法将完全按照此顺序、顺序且没有重叠地调用。