gpt4 book ai didi

multithreading - "EOSError 1400 - Invalid window handle"的可能原因

转载 作者:行者123 更新时间:2023-12-03 14:38:59 24 4
gpt4 key购买 nike

我有一个问题。我有一个使用线程的 VCL 应用程序。该线程执行一些计算并通过 Synchronize() 调用 MainForm 的方法。一切都工作得很好,我有一个“开始”按钮,用于创建并运行线程,还有一个“停止”按钮,用于停止并释放线程。没有错误,什么也没有。

但是由于某种原因,当我关闭应用程序并且我已经运行了线程时,我收到了EOSError 1400 - 无效的窗口句柄。我已经在 OnClose 过程中设置了断点,我唯一做的就是保存一个 ini 文件,没有错误,当我进一步跟踪(使用 F7)时,我到达了最后(Application.Run; end. ),在“调用”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 源代码。

关于multithreading - "EOSError 1400 - Invalid window handle"的可能原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6353903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com