Form.ShowModal在TThread

时间:2018-08-29 01:43:02

标签: multithreading delphi

我有以下课程

type TMyThread = class(TThread)
form: TForm;
procedure Execute; override;
constructor Create();
end;

procedure MyThread.Execute;
begin
inherited;
form.ShowModal;
end;

constructor MyThread.Create;
begin
inherited Create(true);
form := TForm.CreateNew(nil);
end;

然后我执行以下代码:

var
thread: TMyThread;
begin
thread := MyThread.Create;
thread.Resume; //I know its depracated
readln;
end;

我应该期望出现一个窗体窗口,但是什么也没有发生。调试时,我可以看到表单产生了一个新线程,但是我看不到它。我尝试给表单提供它需要的所有属性,但仍然一无所获。 Form.Show也不起作用。但是,当尝试以下操作时:

begin
thread.form := TForm.CreateNew(nil);
thread.form.ShowModal;
end.

将创建一个新表格,并按预期显示。为什么要在TThread中创建表单?因为我想让控制台和应用程序中的表单异步工作。尝试这样做有天生的错误吗?一种不涉及使用线程的简单方法?

0 个答案:

没有答案