private void ExtractFile(CASCFile file) { if (backgroundWorker1.CancellationPending) { throw new OperationCanceledException(); } backgroundWorker1.ReportProgress((int)((float)++NumExtracted / (float)NumFiles * 100)); var rootInfos = cascHandler.GetRootInfo(file.Hash); if (rootInfos == null) { return; } foreach (var rootInfo in rootInfos) { // only enUS atm if ((rootInfo.Block.Flags & locale) == 0) { continue; } var encInfo = cascHandler.GetEncodingInfo(rootInfo.MD5); if (encInfo == null) { continue; } foreach (var key in encInfo.Keys) { cascHandler.ExtractFile(key, ExtractPath, file.FullName); return; } } }