c# – Control.Dispatcher.BeginInvoke()和Control.Dispatcher.I
发布时间:2020-12-15 08:24:16 所属栏目:百科 来源:网络整理
导读:我正在使用 WPF,我对执行顺序Control.Dispatcher.BeginInvoke()和Control.Dispatcher.Invoke()感到困惑. 我将在下面展示一个代码示例 backgroundThread = new Thread(BackgroundThread);backgroundThread.Start();public void BackgroundThread(){ this.Disp
我正在使用
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文档进行了很多研究,但我不明白为什么会这样. 有人请告诉我这些功能的规则究竟是什么? 非常感谢! T& T公司 解决方法
在Invoke同步调用该操作时,BeginInvoke在与Dispatcher关联的线程上异步调用您传递给它的Action.
换句话说,Invoke会立即执行您传递给它的Action,而BeginInvoke会将您传递给它的操作放在Dispatcher队列中,这就像Dispatcher将要执行的操作列表一样,但不能保证何时进行发生或一旦调度员完成其他事情等待该队列. 因此,有时Dispatcher可能正在忙于执行其他操作并将您传递给BeginInvoke的操作放在队列的末尾,直到它可以执行它,然后它会立即执行您传递给Invoke的任何操作,这就是订单差异的原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |