当前位置:  开发笔记 > 程序员 > 正文

从OnTimer事件访问父窗体中的变量 - 获取异常

如何解决《从OnTimer事件访问父窗体中的变量-获取异常》经验,为你挑选了1个好方法。

我在OnTimer事件处理程序(TTimer)中得到一个异常,它在执行时递增父窗体中的整数变量.定时器需要能够访问用作id的递增整数.

我的第一个问题是:如何在Delphi 2007中告诉哪个代码在哪个线程中运行?有没有办法在调试模式下检查这个,所以我可以确定?

其次,如果我需要从另一个线程访问和修改父表单中的变量,那么最好的方法是什么?似乎有时Delphi允许我"错误地"访问这些变量而不给出异常,有时它确实给出了异常.



1> dummzeuch..:

只是为了确定:一方面,你在谈论一个计时器事件,另一方面是关于多线程.这是两种完全不同的并行运行代码的方式.

计时器将始终在主线程中运行.它应该是安全的,可以访问在主线程中创建和使用的所有内容.实际上,只有当没有其他主线程代码在运行时才会发生计时器事件,因为它需要应用程序的消息处理程序来处理计时器消息.因此,它不在任何事件处理代码之外,或者当您的某个事件处理程序调用Application.ProcessMessages时.

线程与此截然不同.在这种情况下,不同线程中的代码彼此独立地运行.如果在多处理器机器(或多核)上运行,甚至可能它们真正并行运行.你可能有这么多问题,特别是Delphi VCL(包括Delphi XE)不是线程保存,所以只能从主线程调用任何VCL类(有几个例外)这条规则).

因此,在预期任何有用的答案之前,请首先澄清您是在谈论计时器还是真正的多线程.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有