在一个线程中是否不能showmessage?(100分)

  • 主题发起人 主题发起人 charlyisme
  • 开始时间 开始时间
C

charlyisme

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个线程中是否不能showmessage?
这里有一个例子程序,Button1一点击,会有异常出现,什么'Canvas not allow drawing'之类的。
不知道是怎么回事。

……
type
TShowMsgThread = class(TThread)
protected
procedure Execute;override;
end;

implementation
procedure TShowMsgThread.Execute;
var
i:integer;
begin
for i:=1 to 5 do
showmessage('ThisMsg is No.'+inttostr(i));

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TShowMsgThread.Create(false) ;
end;
 
只能在主线程中执行 showmessage,可以用同步
synchronize.
 
把显示部分放到一个无参数方法中然后在Execute方法中调用

Synchronize(...)
 
只能在主线程showmessage,否则要用Synchronize。
 
试试只用一句showmessage看行不行。不要用for
 
在多线程序里最好不要用showmessage,
我试过用Synchronize调用主线程showmessage,
结果创建几个线程就出现几个message窗口,
试想一下用户会有什么感觉?
 
在一个线程中是否不能showmessage?

你要清楚showmessage是在Dialogs单元的哈,它是VCL了,在线程中如果需要操作VCL,需要使用
Synchronize()方法来实现同步,其实就是将画图的事情交给主线程来完成,如果你要在线程中显示
这样的对话框,写个过程,在这个过程中用showmessage,然后再用Synchronize()吧
 
后退
顶部