gpt4 book ai didi

c# - Control.Dispatcher.BeginInvoke() 和 Control.Dispatcher.Invoke() 顺序执行是不是很困惑?

转载 作者:太空狗 更新时间:2023-10-29 21:17:55 25 4
gpt4 key购买 nike

我正在使用 WPF,我对 Control.Dispatcher.BeginInvoke()Control.Dispatcher.Invoke() 的执行顺序感到困惑。

我将在下面展示一个代码示例

backgroundThread = new Thread(BackgroundThread);
backgroundThread.Start();
public void BackgroundThread()
{
this.Dispatcher.BeginInvoke(new Action(delegate()
{
WriteLog("Run command 1");
}));

this.Dispatcher.Invoke(new Action(delegate()
{
WriteLog("Run command 2");
}));
}

我预计“命令 1”将在“命令 2”之前运行并完成,但有时似乎“命令 2”在“命令 1”之前运行。我在互联网和 MSDN 文档上进行了很多研究,但我不明白为什么会这样。

谁能告诉我这些函数的具体规则?

非常感谢!

大同

最佳答案

BeginInvoke 在与 Dispatcher 关联的线程上异步调用您传递给它的 Action > 同步调用该操作。

换句话说,Invoke 立即执行您传递给它的所有Action,而BeginInvoke 将您传递给它的操作放在Dispatcher 队列,它类似于 Dispatcher 将要做的事情的列表,但不能保证什么时候会发生或调度程序何时完成其他事情等待那个队列的东西。

所以有时 Dispatcher 可能忙于做其他事情,并将您传递给 BeginInvoke 的操作放在队列的末端,直到它可以执行它,然后它执行任何您立即传递给 Invoke 的操作,这就是顺序差异的原因。

关于c# - Control.Dispatcher.BeginInvoke() 和 Control.Dispatcher.Invoke() 顺序执行是不是很困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18032059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com