Browse Source

Update UGridUtils.pas

Fixed bug that updated accounts lists in a separated thread affecting gui visualization
PascalCoin 6 years ago
parent
commit
dec801a17b
1 changed files with 18 additions and 24 deletions
  1. 18 24
      src/gui-classic/UGridUtils.pas

+ 18 - 24
src/gui-classic/UGridUtils.pas

@@ -57,6 +57,7 @@ Type
     FAccountsGridFilter : TAccountsGridFilter;
     FBalance : Int64;
     FIsProcessing : Boolean;
+    FProcessedList : TOrderedCardinalList;
   protected
     procedure SynchronizedOnTerminated;
     procedure BCExecute; override;
@@ -271,7 +272,7 @@ uses
 { TAccountsGridUpdateThread }
 
 procedure TAccountsGridUpdateThread.BCExecute;
-Var Laccl, LacclTemp : TOrderedCardinalList;
+Var
   l : TOrderedCardinalList;
   i,j : Integer;
   c  : Cardinal;
@@ -283,10 +284,6 @@ begin
   FBalance := 0;
   LNode := FAccountsGrid.Node;
   try
-    Laccl := TOrderedCardinalList.Create;
-    Try
-      Laccl.Clear;
-
       if (Assigned(FAccountsGridFilter.OrderedAccountsKeyList)) then begin
         if (FAccountsGridFilter.indexAccountsKeyList<0) then i := 0
         else i := FAccountsGridFilter.indexAccountsKeyList;
@@ -302,11 +299,11 @@ begin
               LAccount := LNode.Bank.SafeBox.Account(l.Get(j));
               if LApplyfilter then begin
                 if (LAccount.balance>=FAccountsGridFilter.MinBalance) And ((FAccountsGridFilter.MaxBalance<0) Or (LAccount.balance<=FAccountsGridFilter.MaxBalance)) then begin
-                  Laccl.Add(LAccount.account);
+                  FProcessedList.Add(LAccount.account);
                   FBalance := FBalance + LAccount.balance;
                 end;
               end else begin
-                Laccl.Add(LAccount.account);
+                FProcessedList.Add(LAccount.account);
                 FBalance := FBalance + LAccount.balance;
               end;
               if Terminated then Exit;
@@ -322,26 +319,12 @@ begin
         while (c<LNode.Bank.SafeBox.AccountsCount) and (Not Terminated) do begin
           LAccount := LNode.Bank.SafeBox.Account(c);
           if (LAccount.balance>=FAccountsGridFilter.MinBalance) And ((FAccountsGridFilter.MaxBalance<0) Or (LAccount.balance<=FAccountsGridFilter.MaxBalance)) then begin
-            Laccl.Add(LAccount.account);
+            FProcessedList.Add(LAccount.account);
             FBalance := FBalance + LAccount.balance;
           end;
           inc(c);
         end;
       end;
-    Finally
-      try
-        if Not Terminated then begin
-          LacclTemp := FAccountsGrid.LockAccountsList;
-          try
-            LacclTemp.CopyFrom(Laccl);
-          finally
-            FAccountsGrid.UnlockAccountsList;
-          end;
-        end;
-      finally
-        Laccl.Free;
-      end;
-    End;
   Finally
     FisProcessing := False;
     if Not Terminated then
@@ -356,18 +339,29 @@ begin
   FAccountsGrid := AAccountsGrid;
   FAccountsGridFilter := AAccountsGridFilter;
   FisProcessing := True;
+  FProcessedList := TOrderedCardinalList.Create;
   Suspended := False;
 end;
 
 destructor TAccountsGridUpdateThread.Destroy;
 begin
+  FreeAndNil(FProcessedList);
   inherited;
 end;
 
 procedure TAccountsGridUpdateThread.SynchronizedOnTerminated;
+var LacclTemp : TOrderedCardinalList;
 begin
-  FAccountsGrid.FAccountsBalance := FBalance;
-  if Assigned(FAccountsGrid.FOnAccountsGridUpdatedData) then  FAccountsGrid.FOnAccountsGridUpdatedData(FAccountsGrid);
+  if Not Terminated then begin
+    FAccountsGrid.FAccountsBalance := FBalance;
+    LacclTemp := FAccountsGrid.LockAccountsList;
+    try
+      LacclTemp.CopyFrom( FProcessedList );
+    finally
+      FAccountsGrid.UnlockAccountsList;
+    end;
+    if Assigned(FAccountsGrid.FOnAccountsGridUpdatedData) then  FAccountsGrid.FOnAccountsGridUpdatedData(FAccountsGrid);
+  end;
 end;
 
 { TAccountsGrid }