【发布时间】:2020-02-16 17:44:15
【问题描述】:
我很确定 Applicataion.DoEvents() 在 Windows 窗体中。是一种非常早期、非常原始的、WindowsForms 唯一形式的多任务处理。它有所有的迹象和机制:
- 暂停执行调用事件。
- 使上述事件的其余部分成为稍后运行的延续。
- 允许其他事件/进程运行。只是有一些额外的问题,因为 MT 是通过 EventQueue 实现的。甚至可能是对队列的递归调用。
但我只是遇到了一个坚持它“与多任务无关”的人,这与我对功能或多任务的理解不一致。
注意:我明确认为 Mutltithreading 只是 Multitasking 的一种实现。很明显,DoEvents() 不是多threading 的一种形式,我们都知道how poorly that one works in GUI Environments。
【问题讨论】:
-
Application.DoEvents() 运行消息循环(请参阅此处的注释)。就像
ShowDialog()一样。关注内部RunMessageLoopInner(以及留在那里的注释)。另外,当然,Use of Application.DoEvents() -
@Jimi:是的,这就是它如何实现多任务处理的。并没有真正回答我的问题。
-
是的,确实如此。因为这只是语言的问题。你想称之为多任务吗?还是任务切换?在某种程度上,您确实将控制权交还给了系统。在某种方式。但这不是系统实现多任务的方式(我们甚至不开始谈论多线程)。所以,这只是一个选择。您想这样称呼它,以解释运行消息循环时发生的情况吗?这可能没问题,但你必须知道那里真正发生了什么。这是唯一重要的事情(IMO)。
标签: c# winforms asynchronous multitasking