san*_*206 0 delphi multithreading
是否可以使用表的每列的线程更新TStringGrid?
我正在每个线程中进行一些计算,我想将它们添加到一个列中,到目前为止我有类似但有一个奇怪的错误.
在一个线程获得其列中当前行的结果后,它将调用此过程.
procedure TAnimator.Iteration(Sender: TObject);
begin
TMyClass.AddData(TEngine(Sender).Data, TEngine(Sender).ID, TEngine(Sender).IterationsCount);
end;
Run Code Online (Sandbox Code Playgroud)
有时我得到一个表,其中包含正确添加的线程中的所有数据.但是,我可能会得到一个表,其中某些列中的第一个值未正确显示.
|| Col 1 || Col 2 || Col 3 || Col 4 ||
|| 1 || || || 4 ||
|| 1 || 2 || || 4 ||
|| 1 || 2 || 3 || 4 ||
|| 1 || 2 || 3 || 4 ||
|| 1 || 2 || 3 || 4 ||
Run Code Online (Sandbox Code Playgroud)
A TStringGrid是视觉控制.可视控件的线程规则是所有对可视控件的访问都必须从主GUI线程进行.你正在打破这个规则并承受后果.
您的解决方案是遵守规则.使用TThread.Synchronize或TThread.Queue确保访问可视控件的所有代码都在主GUI线程上执行.
| 归档时间: |
|
| 查看次数: |
611 次 |
| 最近记录: |