读书人

为什么多线程退出时提示异常类EOSError

发布时间: 2012-09-28 00:03:35 作者: rapoo

为什么多线程退出时提示错误类EOSError
错误类EOSError,错误信息:'System Error Code:1400 无效的窗口句柄'

多线程更新主窗体的caption,点停止线程后,退出提示上面的错误

线程开始
procedure TForm1.Button1Click(Sender: TObject);
begin
myThread:=TMyThread.Create(true);
myThread.Resume;
end;


线程停止
procedure TForm1.Button2Click(Sender: TObject);
begin
myThread.Terminate;
end;



unit uMyThread;

interface

uses
Classes,Windows,SysUtils;

type
TMyThread = class(TThread)
private
protected
procedure Execute; override;
end;

implementation

uses Unit1;

procedure TMyThread.Execute;
var
i:Integer;
begin

Form1.PageControl1.ActivePageIndex:=1;
for i:=1 to 10000 do
begin
if Terminated then Break;
Sleep(50);
Form1.Caption:=inttostr(i);
end;


end;

end.


为什么呢?

[解决办法]
Form1.PageControl1.ActivePageIndex:=1;
改成用同步方法

private
procedure xx();
...

procedure TMyThread.xx();
begin
Form1.PageControl1.ActivePageIndex:=1;
end;

procedure TMyThread.Execute;
var
i:Integer;
begin
synchronize(xx);
for i:=1 to 10000 do
...
[解决办法]
改成发送消息吧 发给给窗口或线程 不用同步函数
如果需要传递内存地址 协商好由谁释放就可
[解决办法]
将与UI有关的操作放在一个过程中,最后synchronize一次即可

读书人网 >.NET

热点推荐