anchor.diff:    TDelphiLensUIProject = class
     strict private
       FNavigationInfo: TDLUINavigationInfo;
  +    FScanLock      : IOmniCriticalSection;
       FScanResult    : IDLScanResult;
       FUIXStorage    : IDLUIXStorage;
       FWorker        : IOmniTaskControl;
  
positive.code: interface
  
  uses
    OtlComm, OtlTaskControl,
    DelphiLens.Intf,
    DelphiLensUI.UIXStorage,
    DelphiLensUI.UIXEngine.Intf;
  
negative.code:   var navigate: boolean);
  var
    navigateTo: Nullable<TDLUIXLocation>;
    oldCursor : TCursor;
    unitName  : string;
  begin
    //TODO: *** Needs a way to wait for the latest rescan to be processed. Requests must send command ID and ScanCompleted must return this command ID.
    unitName := ExtractFileName(fileName);
    if SameText(ExtractFileExt(unitName), '.pas') then
      unitName := ChangeFileExt(unitName, '');
  
    oldCursor := Screen.Cursor;
    Screen.Cursor := crHourGlass;
    FScanLock.Acquire;
    try
      Screen.Cursor := oldCursor;
      DLUIShowUI(FUIXStorage, FScanResult, TDLUIXLocation.Create(fileName, unitName, line, column), navigateTo);
    finally FScanLock.Release; end;
  
    navigate := navigateTo.HasValue;
    if navigate then
      FNavigationInfo := TDLUINavigationInfo.Create(navigateTo);
  