为什么当我的程序为“时,我的画框画布会被擦除?”;不回应;? 我用Borland的C++ Builder编写了一个小程序,一路上,一切都很好。我的程序有一个地图窗口和一个表格窗口,当用户按下一个按钮时,会启动一个长过程,读取所有地图和表格信息,然后显示出来。每次我通过调试器运行它时,都没有问题。然后今天,我决定不通过调试器来测试它。令我恐惧的是,程序读取地图信息,然后毫无问题地将其显示在paintbox画布上,但当它加载网格信息时,地图被擦除!!!这似乎发生在表的加载阶段。这大约需要4秒钟,在此期间,窗口告诉我它没有响应。这是地图被擦除的时候。有人知道为什么会这样吗?我快发疯了,我真的不明白引擎盖下到底发生了什么

为什么当我的程序为“时,我的画框画布会被擦除?”;不回应;? 我用Borland的C++ Builder编写了一个小程序,一路上,一切都很好。我的程序有一个地图窗口和一个表格窗口,当用户按下一个按钮时,会启动一个长过程,读取所有地图和表格信息,然后显示出来。每次我通过调试器运行它时,都没有问题。然后今天,我决定不通过调试器来测试它。令我恐惧的是,程序读取地图信息,然后毫无问题地将其显示在paintbox画布上,但当它加载网格信息时,地图被擦除!!!这似乎发生在表的加载阶段。这大约需要4秒钟,在此期间,窗口告诉我它没有响应。这是地图被擦除的时候。有人知道为什么会这样吗?我快发疯了,我真的不明白引擎盖下到底发生了什么,c++,c++builder,windows,C++,C++builder,Windows,更新: 我在某种程度上解决了这个问题。我四处摸索,发现了这个: 我添加了代码,以便在表中读取的数据中间运行一次。这解决了我的问题。然而,我想知道是否有人知道为什么会这样?为什么我的程序没有响应会导致我的画布被删除>我从未使用C++ Builder,但我使用Delphi。我认为图书馆是一样的 您使用的组件是否存储图像数据?它可能只会吸引到屏幕上。尝试用另一个窗口覆盖应用程序的窗口。如果它将其擦除,则必须使用存储图像的组件 看,这是为德尔福,但它可能会有所帮助。在C++ Builder中应该有一个图

更新:
我在某种程度上解决了这个问题。我四处摸索,发现了这个:

我添加了代码,以便在表中读取的数据中间运行一次。这解决了我的问题。然而,我想知道是否有人知道为什么会这样?为什么我的程序没有响应会导致我的画布被删除

>我从未使用C++ Builder,但我使用Delphi。我认为图书馆是一样的

您使用的组件是否存储图像数据?它可能只会吸引到屏幕上。尝试用另一个窗口覆盖应用程序的窗口。如果它将其擦除,则必须使用存储图像的组件

看,这是为德尔福,但它可能会有所帮助。在C++ Builder中应该有一个图像组件。试着用它代替油漆盒

您可以通过在单独的线程中运行耗时的任务或调用一些处理窗口消息的函数来解决无响应问题。

Marcus Junglas写了一篇关于此问题的文章,这会影响Delphi和C++Builder

在中编写事件处理程序时 Delphi(类似于 t按钮),总有一天 您的应用程序需要忙一段时间 一段时间,例如,代码需要编写 一个大文件或压缩一些数据

如果你这样做,你会注意到你的 应用程序似乎已锁定。你的 无法再移动窗体,并且 按钮没有显示生命迹象。 它好像被撞坏了

原因是Delpi应用程序 是单线程的。你的密码是什么 写作只代表一堆 由调用的过程 每当发生事件时,Delphi的主线程 发生了。剩下的时间是主要的 线程正在处理系统消息和 其他的东西,比如表单和组件 处理功能

所以,如果你没有完成你的活动 通过做一些冗长的工作来处理, 您将阻止应用程序 处理这些信息


您可以通过在加载地图数据时调用来减少问题,但是我建议使用单独的线程来加载数据

这是一个通用的Windows问题。如果在主消息传递线程上发生任何长处理,应用程序将停止响应。