`
marlonyao
  • 浏览: 248806 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

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

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

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

[完]
分享到:
评论

相关推荐

    VC之美化界面篇本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础:

    通过MFC的消息映射(Message Mapping)和反射(Message Reflecting)机制,在Windows准备或者正在绘制该元素时,偷偷修改它的状态和行为,譬如:让按钮的边框为红色; 3. 利用MFC类的虚函数机制,重载有用的虚函数。在...

    傲游浏览器3(Maxthon) 3.1.8.1000 正式版

    * 解决同时按下 Alt + Ctrl + ESC 时, 浏览器失去响应的问题. * 重置所有选项后, 快速保存图片的路径会消失. * 已锁定的标签会干扰关闭全部标签的动作, 使其左侧的标签无法被关闭. * 调整侧边栏大小会使侧边栏失去...

    C#控件大全

    (6)ShowDialog方法:该方法的作用是将窗体显示为模式对话框。其调用格式为: 窗体名.ShowDialog(); 3.常用事件 (1)Load事件:该事件在窗体加载到内存时发生,即在第一次显示窗体前发生。 (2)Activated...

    Foobar2000.AERO效果播放器

    4、进入 参数设置-显示-分栏界面,右侧选择 主要-FCL导入和导出-导入,在弹出的导入窗口中找到EIKO_v*.fcl文件,在“选择要导入的设置”对话框中,按需求选择你的设置,如果你没有什么要保留的分栏界面设置或者不...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    先让网站能够正常工作于尽可能旧的浏览器上,然后不断为它在新型浏览器上实现更多的增强和改进。 Viewport 移动设备上的Viewport就是设备的屏幕上能用来显示网页的一块区域,即浏览器上用来显示网页的那部分区域。...

    PT80-NEAT开发指南v1.1

    事件驱动和消息响应机制 ..................................................................................................................... 17 建立一个应用程序 ..........................................

    xheditor-1.1.14

    说明:count和list必需选其中一个值,注意count模式插入表情img的alt为空 备注:1.0.0 beta2新添加 hoverExecDelay:悬停自动执行延迟的时间 参数:数值(单位毫秒),默认为100,设置为-1关闭此功能 备注:1.0.0 rc2...

    KODExplorer 芒果云-资源管理器

    - 对话框最小化或关闭,重置最大index为焦点窗口 - 图片缩略图生成:小于5k则不生成(直接输出) - 加载文件列表改为异步方式,数据返回采用回调函数方式。增强体验 - 选中优化,文件&文件夹重命名、文件&文件夹...

    眼睛卫士光放3.21版本

    ⒍ 问:为什么使用眼睛卫士后,我不能再更改系统时间了? 答:眼睛卫士禁止修改系统时间,您可以让眼睛卫士失效或退出眼睛卫士后再修改。 ⒎ 问:智能跟踪(1)和智能跟踪(2)的区别? 答:智能跟踪(1)自2.5版起更改...

    C#全能速查宝典

    2.2.3 BeginEdit方法——将单元格置于编辑模式下 153 2.2.4 Button控件——按钮控件 153 2.2.5 CancelEdit属性——取消更改 155 2.2.6 CanPaste方法——是否可以粘贴数据 155 2.2.7 CanRedo属性——是否有可以重新...

Global site tag (gtag.js) - Google Analytics