Я не думаю, что Application.ProcessMessages
здесь вообще поможет, так как вся работа происходит за один вызов Assign
.
Есть ли у SynEditLog
методы BeginUpdate
/ EndUpdate
? Я бы использовал их и посмотрел, как у тебя дела. Например:
SynEditLog.BeginUpdate;
try
SynEditLog.Lines.Assign(str);
finally
SynEditLog.EndUpdate;
end;
В ответ на это не работает
Вам нужно будет разбить присвоение списка строк свойству Lines. Примерно так:
var
LIndex: integer;
begin
SynEditLog.BeginUpdate;
try
//added: set the capacity before adding all the strings.
SynEditLog.Lines.Capacity := str.Capacity;
for LIndex := 0 to str.Count - 1 do
begin
SynEditLog.Lines.Add(str[LIndex]);
if LIndex mod 100 = 0 then
Application.ProcessMessages;
end;
finally
SynEditLog.EndUpdate;
end;
end;
(примечание: код, введенный непосредственно в браузер, может не скомпилироваться)
Если это слишком медленно, попробуйте увеличить LIndex mod 100 = 0
до чего-то большего, например, 1000 или даже 5000.
N @