private void FileWorkerDoWork(object sender, DoWorkEventArgs e) { int insertIndex = -1, skippedFiles = 0; PdfFile pdfFile = null; object[] args = (object[])e.Argument; string[] fileNames = (string[])args[0]; if (args.Length == 2) { insertIndex = int.Parse(args[1].ToString()); } foreach (string fileName in fileNames) { fileBackgroundWorker.ReportProgress(0, string.Format("Loading PDF file: {0}", fileName)); pdfFile = new PdfFile(fileName); int status = pdfFile.Open(); if (status == Define.Success || status == Define.BadPasswordException) { if (insertIndex == -1) { App.Current.Dispatcher.Invoke(delegate() { PdfFiles.Add(pdfFile); }); } else { App.Current.Dispatcher.Invoke(delegate() { PdfFiles.Insert(insertIndex, pdfFile); }); insertIndex++; } } else { skippedFiles++; } } e.Result = new object[] { skippedFiles, insertIndex }; }