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

在线程中有以下代码,在线程中调用主窗口的变量:seconds:=strtoint(MainForm.SendTime.Text);……加入这一段代码后,运行程序并调用线程... 在线程中有以下代码,在线程中调用主窗口的变量:
seconds:=strtoint(MainForm.SendTime.Text);……
加入这一段代码后,运行程序并调用线程,退出程序时会报错(如图)。去掉这一段代码就不会出错,请问怎样解决这一问题?
展开
 我来答
mit1208
2011-07-05 · TA获得超过2347个赞
知道大有可为答主
回答量:2743
采纳率:0%
帮助的人:1860万
展开全部
将SendTime.Text内容赋值给seconds是在线程中执行的
但不能保证主线程中对SendTime.text内容的修改,肯定会出错!
解决办法是使用Delphi自带的同步主线程的语句或使用SendMessage或PostMessage进行消息同步
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
己闻楣Sx
2011-07-04 · TA获得超过1935个赞
知道大有可为答主
回答量:1057
采纳率:93%
帮助的人:911万
展开全部
在线程中,需要写一个同步方法,在方法中访问主线程的窗体资源。
procedure TMyThread.GetMainFormText;
begin
Seconds := StrToInt( MainForm.SendTime.Text );
end;
在线程的主逻辑体中写为Synchronize( GetMainFormText );
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
alctel112358
2011-07-04 · 超过30用户采纳过TA的回答
知道答主
回答量:97
采纳率:0%
帮助的人:86.8万
展开全部
你在线程中调用主窗体的内容,退出时是不是没有关闭线程啊?这样的话当主窗体销毁,而线程没有终止时,调用主窗体的内容当然会报错了
追问
程序退出前线程已经通过thread.Terminate结束了
追答
是在Close里面做的吗?那样的话时间可能来不及,不知道你线程里面处理了多少事情,你可以通过输出日志的方式看一下,你的程序中究竟是线程先结束还是窗体先销毁。
解决的办法我没有试过,但是WaitForSingleObject应该可以解决,可以等待线程结束
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
明月共我18
2011-07-04 · 超过10用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:22万
展开全部
简单的处理就是先判断一下MainForm是否存在
if Assigned(MainForm) then
seconds:=strtoint(MainForm.SendTime.Text);……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tianlang681021
2012-03-06
知道答主
回答量:1
采纳率:0%
帮助的人:1651
展开全部
需要首先创建窗口关联
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式