我正在使用用于维护系统的 VCL 表单开发多线程服务器。每个线程都可以写在 MainForm 的 RichEdit 上,以实时显示它在做什么(如果出现问题,我们必须快速解决这个问题)。
但是,当一个线程写入 RichEdit 时,我不时收到“EOutOfResource”错误:“Erreur d'insertion de ligne RichEdit”(谷歌翻译:错误插入行 RichEdit)。RichEdit 内容变得一团糟。
这是在 RichEdit 上添加一行的主要表单过程:
procedure Main.MajRichEdit(S1,S2:string;tform:TFontStyles;i1:integer)
begin
CriticalSection.Acquire
if S2='C' then
begin
RichEditC.SelAttributes.Style:=tform;
RichEditC.SelAttributes.Color:=i1;
RichEditC.Lines.Add:=S1;
end
else if S2='CN' then
RichEditC.Lines.Add:=S1;
else if S2='T' then
begin
RichEditT.SelAttributes.Style:=tform;
RichEditT.SelAttributes.Color:=i1;
RichEditT.Lines.Add:=S1;
end
else if S2='TN' then
RichEditT.Lines.Add:=S1;
else if S2='S' then
begin
RichEditS.SelAttributes.Style:=tform;
RichEditS.SelAttributes.Color:=i1;
RichEditS.Lines.Add:=S1;
end
else if S2='SN' then
RichEditS.Lines.Add:=S1;
CriticalSection.Release;
end;
这些是来自我的线程的调用:
//..Declaration Variable..//
public
sCall1,sCall2:string;
tFontCall1:TFontStyles;
iNbColor1:integer;
//..Appel MajRichEdit..//
procedure Mythread.CallREMajTelforIHM;
begin
LockIHM.BeginWrite;
Main.MajRichEdit(sCall1,sCall2,tFontCall1,iNbColor1);
LockIHM.EndWrite;
end;
//..Appel CallRe ..//
//My code
sCall1:="un petit peu de français , c'est pas plus mal ;) "
sCall2:="C";
tFontCall1:=[fsBold]; //If i want a txt in bold ;)
iCall1:=clRed;
Queue(CallREMajTelforIHM);
我有类似的东西工作正常(只是一件小事的 EAccessViolation,但我会在之后修复它;))
可以用 try/except 绕过异常?我在我的系统中没有做任何更改,所以我不明白为什么修改 TRichEdit 策略......