模式对话框为什么不会让界面失去响应?

阅读更多
我很早就有这个疑问了,但一直懒得去弄清楚,直到最近又要开始写桌面程序才下决定要弄清楚。我们都知道在swing(或者wxpython)中使用事件处理使用单线程模型,即所有的事件处理、界面更新操作都是在必须在同一个线程中执行,这个线程又称为事件分发线程(Event Dispatcher Thread)。这样做的好处就是避免大量线程同步的开销,缺点是不能在事件线程中处理耗时操作,这会阻塞用户鼠标键盘操作,给用户的感觉就是界面失去响应,这给用户的感觉很不好。但是,我们却经常在事件线程中弹出模式对话框,我们都知道模式对话框是阻塞的,因此它应该也会阻塞事件线程,从而导致用户界面不响应,但事实是对话框仍可响应用户的鼠标键盘事件,这是为什么呢?

在网上找了很久才到 这里找到答案。原因是当调用对话框的showModal()方法时,对话框并不是干等着(就像Thread.sleep())那样,而是创建了一个新的事件队列来处理用户的鼠标键盘事件,用户界面当然就不会失去响应了。

P.S. 后来又发现一篇讲得比较透彻的文章,见 这里。

[完]

你可能感兴趣的:(wxPython,Swing,thread,.net)