---恢复内容开始---

介绍

在手机应用上,我们不应该使用速度慢的代码,当然我们在桌面程序上也应该避免这个,当手机应用长时间没有相应的时候,程序会提示“程序没响应,是否关闭”的提示,这个非常不好,所以我们需要来解决这个问题。

下面是一个普通代码,通过for来循环添加ListVIew行,代码很简单,大家都见过

var
I: Integer;
Total: Integer;
begin
// counts the prime numbers below the given value
Total := ;
for I := to MaxValue do
begin
if (I * mod MaxValue) = then
ListView1.Items.Add.Text := 'B: ' + I.ToString;
if IsPrime (I) then
Inc (Total);
end;
ListView1.Items.Add.Text := 'Blocking: ' + Total.ToString;
复制代码

在运行过程中,程序是无响应的,屏幕更本不刷新,直到运行结束,但是这里有个问题,MaxValue如果少还行,如果数值比较大,那么我们就会看到如下的界面

提示了程序没有响应,是否需要关闭它,这显示是个大问题,我们需要来解决。

解决这个问题可以通过定时器或者线程,但是相比线程,定时器差很多,如果代码比较复杂,还是可能会出现上面的问题,目前解决UI无法响应,真正的解决方法还是通过线程的方法,实现线程当然是非常简单,但是也需要注意,在更新UI的时候,需要使用“synchronize”。

procedure TForm5.Button3Click(Sender: TObject);
begin
TThread.CreateAnonymousThread(procedure ()
var
I: Integer;
Total: Integer;
begin
Total := ;
for I := to MaxValue do
begin
if (I * mod MaxValue) = then
TThread.Synchronize (TThread.CurrentThread,
procedure ()
begin
ListView1.Items.Add.Text := 'Th: ' + I.ToString;
end); if IsPrime (I) then
Inc (Total);
end; TThread.Synchronize (TThread.CurrentThread,
procedure ()
begin
ListView1.Items.Add.Text := 'Thread: ' + Total.ToString;
NotifyComplete;
end);
end).Start;
end;

当启动线程后,程序没有出现无响应的问题,或者更本不会发生什么。

Delphi XE6 使用定时器或者线程解决程序界面无响应问题的更多相关文章

  1. delphi xe6 窗口 visible 不能隐藏 解决

    delphi xe6 窗口 visible 不能隐藏 解决 在工程代码里面加上 Application.ShowMainForm := false;

  2. Ubuntu16.04 下的网易云出现网络异常、无法播放,界面无响应问题的统一解决

    能够在Linux系统下体验到原生界面的网易云音乐是件不错的事情,但是它总是经常性的出现网络异常,界面无响应的问题 为了听歌的体验,进行深入探究: 首先通过终端启用网易云音乐:sudo netease- ...

  3. Win8/Win10下程序经常无响应的解决办法

    如果你使用Win8/Win10系统时经常出现程序无响应的问题不仿试下如下解决办法. 表现症状: 任何程序都有可能出现无响应(记事本.Visual Studio.QQ.视频播放器等) 一旦一个程序出现未 ...

  4. DELPHI实现类似仿360桌面的程序界面

    1.窗体半透明: Alphablend属性为true;Alphablendvalue的值为100 2.窗体透明: formCreate: Self.TransparentColor := True;S ...

  5. 解决 OnDropFiles 可能无响应的问题【转】

    大多数程序都有接收拖放文件的功能,即是用鼠标把文件拖放到程序窗口上方,符合格式的文件就会自动被程序打开.最近自己对编写的程序增加了一个拖放文件的功能,在 Windows XP.Windows Serv ...

  6. Windows程序卡顿、无响应问题定位

    当windows程序出现异常.界面卡顿.无响应情况时,在有工程和源码的情况下,程序员通常是打开IDE,在DEBUG模式下进行调试.但如果是一个RELEASE程序,且无调试环境,该如何来定位呢. 这里介 ...

  7. 谈.Net委托与线程——解决窗体假死

    转自:http://www.cnblogs.com/smartls/archive/2011/04/08/2008981.html#2457370   引言 在之前的<创建无阻塞的异步调用> ...

  8. Delphi XE6 试用Android视频采集

    FMX支持视频采集,具体见FMX.Media,提供了很类支持音频.视频的处理. 按帮助文档,用Note3做了测试,结果,效率太低,不可用. 具体可查询帮助Video Capturing一节,我就是按这 ...

  9. Delphi 实现多线程编程的线程类 TThread

    http://blog.csdn.net/henreash/article/details/3183119 Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉 ...

随机推荐

  1. 七.搭建基本的FTP服务

    1.安装vsftpd软件包 ]# yum -y install vsftpd 2.重起vsftpd服务 ]# systemctl restart vsftpd ]# systemctl enable ...

  2. (尚003).Vue_模板语法

    1.双大括号表达式 2.指令一:强制数据绑定 3.指令二;绑定事件监听 test003.html<!DOCTYPE html><html lang="en"> ...

  3. [matlab工具箱] 神经网络Neural Net

    //目的是学习在BP神经网络的基础上添加遗传算法,蚁群算法等优化算法来优化网络,这是后话. 先简单了解了MATLAB中的神经网络工具箱,工具箱功能还是非常强大的,已经可以拟合出非常多的曲线来分析了. ...

  4. 2019暑期金华集训 Day7 分治

    自闭集训 Day7 分治 主定理 由于我沉迷调题,这个地方没听课. 某些不等式 咕了 nth_element 使用快速排序的思想,选一个中间点,看左右有多少个. 期望复杂度\(O(n)\). 首先把一 ...

  5. 《挑战30天C++入门极限》新手入门:C/C++中枚举类型(enum)

        新手入门:C/C++中枚举类型(enum) 如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型.之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来. ...

  6. Loadrunner录制+运行+结果-【飞机订票系统实战】

    目录结构: 一.LoadRunner实现订票系统脚本录制 二.Loadrunner实现订票系统IP欺骗(此处可以不设置) 三.Loadrunner运行录制的脚本 四.Load generator配置 ...

  7. 第12组 Alpha冲刺(3/6)

    Header 队名:To Be Done 组长博客 作业博客 团队项目进行情况 燃尽图(组内共享) 展示Git当日代码/文档签入记录(组内共享) 注: 由于GitHub的免费范围内对多人开发存在较多限 ...

  8. Tkinter 之TopLevel顶级窗口

    一.参数说明 width  设置宽度 height  设置高度 background(bg) 设置背景颜色默认值由系统指定为了防止更新,可以将颜色值设置为空字符串 borderwidth(bd) 设置 ...

  9. [MYSQL手工注入](2)基于布尔的SQL盲注实战

    0x02 MYSQL 手工注入实战--基于布尔的SQL盲注 前言,之前有对MYSQL基于报错的手工注入进行过介绍,但今天的实验环境,并不是基于报错的SQL注入,而是一个基于布尔的SQL盲注测试流程. ...

  10. [转载] 浏览器Browser对同域名下的请求并发数量

    原文链接:https://blog.csdn.net/a562550212/article/details/79552713 另附原文作者贴的一个知乎地址,几个答主讲的非常好  https://www ...