서브 폼에서 스레드를 실행할 때 문제가 있습니다.서브 폼에서 델파이 스레드 오류
기본 폼
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Unit2;
procedure TForm1.Button1Click(Sender: TObject);
begin
TForm2.create(form1).ShowModal;
end;
하위 폼
type
TMthread=class(Tthread)
protected
procedure execute; override;
end;
type
TForm2 = class(TForm)
Label1: TLabel;
procedure FormShow(Sender: TObject);
private
public
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
uses Unit1;
procedure TMthread.Execute;
begin
synchronize(procedure
begin
sleep(200);
freeonterminate:=true;
sleep(200);
form2.label1.Caption:='beep';
form1.button1.Caption:='beep';
end);
end;
procedure TForm2.FormShow(Sender: TObject);
var Loadcombo2: TMthread;
begin
Loadcombo2:=TMthread.Create(False);
end;
프로그램
program Project1;
uses
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Form2.Label1.caption에 액세스하려고 할 때 내가 실행 과정에서 오류가 발생했습니다.
내 테스트 :.
내가 초기화 섹션 (마지막 코드)에 하위 폼 (형식 2)를 추가 응용 프로그램이 오류없이 실행되지만를 Form2에 Label1.caption을 변경하지 않는 경우 (Button1.caption 메인 폼에서 변경됨)
정확하게 동일한 스레드를 주 폼에 넣으면 문제없이 작동합니다.
가 Form1을 Form2를 같은 형태의 전역 변수에 의존하지 마십시오
내가 대신 이런 식으로 뭔가를 작성하는 의미 의심 . 이들은 일반적으로 자동 생성 양식에서 사용됩니다. 이는 Application.CreateForm이 호출되는 경우를 의미합니다. 그러나 양식 두 개가 종료되면 어떻게합니까? 아니면 코드 에서처럼 자동으로 생성되지 않습니다. – nil
당신은 두 번 * error *라고 말하지만 한 번에 * 오류 *가 무엇인지 알려주지 않습니다. 그것은 당신 앞에있는 스크린에 있습니다. 안타깝게도 우리가 앉아있는 곳에서 화면을 볼 수 없습니다. 예, 코드를 보는 것이 명확하지만 향후 문제에 대한 해결책을 찾는 사람에게는 해당되지 않습니다. 질문에 오류 정보를 포함 시키십시오. [편집]을 수행하는 동안 실제로 질문 할 수도 있습니다 (현재 게시하지 않습니다). –