如何解决可能的原因为“ EOSError 1400-无效的窗口句柄”
| 我有个问题。 我有一个使用线程的VCL应用程序。该线程进行一些计算,并通过Synchronize()调用MainForm的方法。一切正常,我有一个““开始”按钮,它创建并运行该线程,还有一个“停止”按钮,该按钮停止并释放它。没有错误,没有。 但是由于某种原因,当我关闭应用程序并运行线程时,我得到一个“ 0”。我已经断点了OnClose过程,唯一要做的就是保存一个ini文件,这没有错误,当我进一步跟踪(使用F7)时,在调用“ \”后到达最后(to1ѭ)。 “end.
我得到了错误,因此没有特定的代码行引发它。
我希望这个问题有点清楚并且希望它可以解决,因为仅忽略错误似乎有点不干净。
谢谢inb4
回答
当调用线程的Execute方法时,此错误发生在我身上,它看起来像这样:
procedure TRunThread.Execute;
var (...)
begin
while not Terminated do begin
(...)
MainForm.Memo1.Lines.Add(\'Some text\'); // Even though this call worked fine during
//the application running,it caused errors on shutting the app down.
// For acccessing GUI elements,it\'s necessary to use Synchronize()
(...)
end;
end;
解决方法
可能的原因是从线程对GUI的某些不同步访问。您说该线程没有执行此操作,但是没有看到看上去最好的
TRunThread.Execute
源代码。
, 我遇到了同样的问题,错误代码5Access is denied
。事实证明,这与一个线程开始测试嵌入式面板上的Internet连接(使用BeginThread
)有关。如果用户在显示表单后立即退出表单(正在测试Internet连接),则会出现AV。
在我的开发PC上,互联网连接测试成功了……而且如此之快,我从未发现过问题!经过几个小时的努力,我终于找到了这个线程,并通过断开网络电缆来复制它。
解决方案很简单:退出表单时(例如在FormDestroy
事件中),请确保在继续执行之前线程肯定未运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。