delphi createthread 参数传递时程序异常,求高手指教,高分求帮助!!!

type
Test=record
a: String;
end;
function MyFun(var Param: Test): Integer; stdcall;
var
S1: String;
begin
S1:= Param.a;
Form1.Memo1.Lines.Add(S1);
ShowMessage(S1);
end;
procedure TForm1.VoiceReport(S: String);

var
p: Test;
ID: THandle;
begin
p.a:= S;
CreateThread(nil,0,@MyFun,@p,0,ID);
ShowMessage('你好!!!!');
end;
procedure TForm1.Button1Click(Sender: TObject);

begin
VoiceReport('卫星信号正常');
end;
每次点击按钮启动进程时, ShowMessage(S1)时,出现的对话框有时候异常,导致程序直接出现死机现象,求高手指教呀,满意后绝对高分!!!

Form1.Memo1.Lines.Add(S1);这句不是线程安全的,线程中不能这样直接访问窗体中的控件。线程要访问窗体控件必须要考虑线程同步,否则就会出现死锁。通过DELPHI的IDE创建自定义线程类时,生成的类中就有明确的说明:

线程中用ShowMessage更是致命的,消息窗口是模态窗口,显示时线程的后续代码不能继续执行。

温馨提示:答案为网友推荐,仅供参考
相似回答