初学多线程,求救,求救,高手看看这段代码错在哪里?为啥每次运行程序总出 'Canvas do es not allow drawing'错误(50分)

  • 主题发起人 主题发起人 mxk130
  • 开始时间 开始时间
M

mxk130

Unregistered / Unconfirmed
GUEST, unregistred user!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TmyThread=class(Tthread)
protected
procedure Execute;
override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TmyThread }
procedure TmyThread.Execute;
var
i:integer;
begin
for i:=0 to 3do
begin
showmessage(inttostr(i));
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
myThread:TmyThread;
begin
myThread:=TmyThread.Create(true);
myThread.FreeOnTerminate:=true;
myThread.Resume;
end;

end.
 
把showmessage(inttostr(i));放在线程的一个方法中
再用Synchronize方法调用。
 
好象不可以在Execute中直接显示信息吧
 
delphi的界面元素好象只能够异步运行
 
可是如果单步调试的话,就不会有错误出现,真是把我给搞糊涂了
 
看看《Delphi 5开发人员指南》第十一章
永远的Delphi有下,网址:
http://fdelphi.myrice.com/delphidoc.html
 
好,我这就去下了看。谢谢。你说的同步的方法可以解决那个问题,可是却是在主线程里运行了,在跳出对话框的时候,窗体不能活的焦点,失去了多线程程序的意义。希望您有想法的时候一定通知我,不胜感激!
 
多线程要操作VCL有多种方法,用Synchronize方法只是其中之一,
用showmessage函数,主线程就一定会锁定的,
要想主线程不锁定,可以用发送消息的方法,
我上面提到的书上都有讲的。
 
鍘熸潵鏄?繖鏍峰瓙锛岃阿璋?綘銆
 
楼主,你贴的是什么?
 
哈哈,我是说谢谢你了,让我们继续努力,祝快乐。
 
加好友吧,不过我不知道怎样加
 
我也不知道。[:(]
 
后退
顶部