首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-09-28 
为什么多线程退出时提示错误类EOSError错误类EOSError,错误信息:System ErrorCode:1400 无效的窗口句柄

为什么多线程退出时提示错误类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一次即可

热点排行