void CheckGMFileValidity(object o) { ValidityThreadArgs vta = (ValidityThreadArgs)o; string dir = vta.dir; string[] allFiles = Directory.GetFiles(dir); int numFiles = allFiles.Length; WaitDlg dlg = vta.dlg; dlg.UpdateStatus("Checking {0} files", numFiles); int exceptions = 0; for (int i = 0; i < numFiles; ++i) { Box.ResetIndexCount(); string currentFile = allFiles[i]; GTMP.GMFile.GMFileInfo fi = GTMP.GMFile.Parse(currentFile); List <IBox> boxes = ConvertGMFileBoxes(fi.Boxes); try { MemoryStream ms = new MemoryStream(boxes.Count * 0x4c); using (BinaryWriter bw = new BinaryWriter(ms)) { foreach (IBox b in boxes) { b.Serialize(bw); } } } catch (InvalidBoxStateException ibse) { if (++exceptions == 50) { break; } DebugLogger.Log("Debug", "Exception was from {0}", currentFile); dlg.UpdateStatus("Caught invalid box exception {0} for {1} in file {2}", ibse.Message, ibse.InvalidBox.Name, currentFile); } if ((i != 0) && ((i % 10) == 0)) { dlg.UpdateStatus(String.Format("Tested {0} files", i)); } } dlg.AllowClose("All checked"); }
void checkGameFileValidity_Click(object sender, EventArgs e) { //string dir = PickFolder(this, "Open dir with GM files"); string dir = @"T:\gt2\gtmenu\pics\GTMenuDatDecomp"; if (!String.IsNullOrEmpty(dir)) { using (WaitDlg dlg = new WaitDlg("Checking GM Files")) { ValidityThreadArgs vta = new ValidityThreadArgs(); vta.dlg = dlg; vta.dir = dir; System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(CheckGMFileValidity), vta); dlg.ShowDialog(this); } } }