点击最小化或最大化旋钮不松开,为什么线程停止了

点击最小化或最大化按钮不松开,为什么线程停止了?
点击最小化或最大化按钮不松开,为什么线程停止了?

具体程序如下,线程1用于在FORM上写数字,线程2用于在IMAGE上写数字,程序运行时把鼠标放在窗体的最大化或最小化按钮上,点击一下鼠标左键但不要松开鼠标左键,此时FORM上写的数字还在继续走动,而image上写的数字竟然停下来了,这是为什么?如何避免这种情况出现?当鼠标点击按钮并不松开时,如何让程序继续运行而不受影响呢?

--------------------------------------


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    btn1: TButton;
    lbl1: TLabel;
    img1: TImage;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type
  TMyThread1 = class(TThread)
  protected
    procedure Execute; override;
  end;
type
  TMyThread2 = class(TThread)
  private
    FValue:integer;
  protected
    procedure Execute; override;
    procedure MyVCLAction;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TMyThread1.Execute;
var
  i: Integer;
begin
  FreeOnTerminate := True; {这可以让线程执行完毕后随即释放}
  for i := 0 to 500000 do
  begin
    Form1.Canvas.Lock;
    Form1.Canvas.TextOut(10, 10, IntToStr(i));
    Form1.Canvas.Unlock;
  end;
end;

procedure TMyThread2.Execute;
var
  i: Integer;
begin
  FreeOnTerminate := True; {这可以让线程执行完毕后随即释放}
  for i := 0 to 500000 do
  begin
    FValue := i;
    Synchronize(MyVCLAction);
  end;
end;

procedure TMyThread2.MyVCLAction;
begin
  Form1.img1.Canvas.TextOut(10, 10, IntTostr(FVAlue));
end;

procedure TForm1.btn1Click(Sender: TObject);
var
  ID: THandle; 
begin
  TMyThread1.Create(False); 
  TMyThread2.Create(False);
end;

文章评论