Delphi中线程调用主窗口变量的问题

[复制链接]
查看11 | 回复5 | 2011-7-5 08:27:51 | 显示全部楼层 |阅读模式
在线程中有以下代码,在线程中调用主窗口的变量:
seconds:=strtoint(MainForm.SendTime.Text);……
加入这一段代码后,运行程序并调用线程,退出程序时会报错(如图)。去掉这一段代码就不会出错,请问怎样解决这一问题?

回复

使用道具 举报

千问 | 2011-7-5 08:27:51 | 显示全部楼层
将SendTime.Text内容赋值给seconds是在线程中执行的但不能保证主线程中对SendTime.text内容的修改,肯定会出错!解决办法是使用Delphi自带的同步主线程的语句或使用SendMessage或PostMessage进行消息同步...
回复

使用道具 举报

千问 | 2011-7-5 08:27:51 | 显示全部楼层
在线程中,需要写一个同步方法,在方法中访问主线程的窗体资源。procedure TMyThread.GetMainFormText;beginSeconds := StrToInt( MainForm.SendTime.Text );end;在线程的主逻辑体中写为Synchronize( GetMainFormText );...
回复

使用道具 举报

千问 | 2011-7-5 08:27:51 | 显示全部楼层
你在线程中调用主窗体的内容,退出时是不是没有关闭线程啊?这样的话当主窗体销毁,而线程没有终止时,调用主窗体的内容当然会报错了...
回复

使用道具 举报

千问 | 2011-7-5 08:27:51 | 显示全部楼层
简单的处理就是先判断一下MainForm是否存在if Assigned(MainForm) thenseconds:=strtoint(MainForm.SendTime.Text);……...
回复

使用道具 举报

千问 | 2011-7-5 08:27:51 | 显示全部楼层
需要首先创建窗口关联...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行