0

我正在使用用于维护系统的 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 策略......

4

0 回答 0