.NET窗体事件(例如按钮单击)是同步还是异步?

时间:2011-01-27 00:25:45

标签: .net forms

我的理解是它们是同步的,但是在我正在进行的项目中,当我双击一个按钮时,它最终调用该方法两次,但是在长时间运行的第一次调用返回之前进行秒调用。

我知道我可以通过在第一次点击时禁用按钮来阻止这种情况,但我想知道它们是同步还是异步?

谢谢, 振芳。

3 个答案:

答案 0 :(得分:1)

这一切都取决于窗体的设置和编程方式。如果UI在其自己的线程中运行,或者按钮点击被连接起来作为后台请求运行,您会将它们视为异步事件。但是,如果他们没有以这种方式接线,他们会将它们视为同步事件。

因此,在不了解Windows窗体的编程方式的情况下,答案是取决于

答案 1 :(得分:1)

它们是同步但不是序列化。有可能再次出现。

听起来你的按钮点击处理程序直接或间接地运行嵌套的消息循环。在这种情况下,可以在第一个返回之前再次调用处理程序。

答案 2 :(得分:0)

默认情况下,通常情况下,虽然Windows消息泵的工作方式有时可能会模拟它。当然,这还取决于你如何定义“同步”和“异步”。

通常,当您单击某个按钮时,GUI线程通常不会返回,直到该方法及其调用的任何同步方法完成。这就是在事件处理程序中进行cpu密集工作时UI将“冻结”的原因。