private void OnGlobalProgressChanged(GlobalProgressInfo info)
 {
     if (GlobalProgressChanged != null)
         GlobalProgressChanged(info);
 }
 private void BeginUpdateProc()
 {
     var db = PcdbFile.Open(dbPath);
     OnOpenConnection();
     db.OpenConnection();
     OnBeginTransaction();
     db.BeginTransaction();
     var count = files.Count;
     var progressInfo = new GlobalProgressInfo(null, new Progress((uint)count), true);
     OnGlobalProgressChanged(progressInfo);
     progressInfo.Startup = false;
     using (host = new HostParser(db, ApplicationPersistent.ParserProviders))
     {
         db.AppendedData += OnAppendedData;
         host.FoundData += OnFoundData;
         host.ProgressChanged += OnFileProgressChanged;
         for (var i = 0; i < count; i++)
         {
             if (Cancelled)
             {
                 OnRollBackTransaction();
                 db.RollBackTransaction();
                 db.CloseConnection();
                 break;
             }
             progressInfo.Progress.Current = (uint)i;
             progressInfo.File = files[i];
             OnGlobalProgressChanged(progressInfo);
             host.Parse(files[i]);
         }
         host.FoundData -= OnFoundData;
         host.ProgressChanged -= OnFileProgressChanged;
         db.AppendedData -= OnAppendedData;
     }
     host = null;
     if (!Cancelled)
     {
         OnCommitTransaction();
         db.CommitTransaction();
         db.CloseConnection();
         OnCompress();
         db.Compress();
     }
     Completed = true;
     OnUpdateCompleted(count, !Cancelled);
 }