Я делаю некоторые операции с «большим» файлом (около 4 Мб)
Я делаю это:
1. Получить все файлы из каталога и поместить их в IList MyInfoClass имеет свойства: имя, расширение, fullPath, creationDate, contentPart
2. Я делаю запрос Linq, чтобы получить только какой-то тип расширения.
3. Я зацикливаюсь на результате запроса Linq и для каждого открываю файл, выполняю некоторую операцию (получаем значение) и помещаю результат в MyFileIno.ContentPart.
К вашему сведению: 30 файлов, это 14-секундная операция
Это работа.
Проблема, когда я запускаю свою библиотеку из пользовательского интерфейса, когда я нажимаю кнопку, окно останавливается во время работы. Я хотел бы:
- решение не замораживать форму
- см. Ход выполнения
Не могли бы вы дать мне лучшую практику для решения такого рода проблем?
Спасибо
код
public class FileManager
{
public string CurrentFileName { get; set; }
public void Validation(string path)
{
IList<InfoFile> listFile = GetListFile(path);
foreach (InfoFile item in listFile)
{
CurrentFileName = item.Name;
.....
}
}
}
private void button1_Click(object sender, EventArgs e)
{
var worker = new BackgroundWorker();
worker.DoWork += (s, args) =>
{
int percentProgress = 6;
FileManager fileManager = new FileManager();
fileManager.Validation(@"C:.....");
((BackgroundWorker)s).ReportProgress(percentProgress, fileManager.CurrentFileName);
};
worker.ProgressChanged += (s, args) =>
{
var currentFilename = (string)args.UserState;
label1.Text = currentFilename;
progressBar1.Value = args.ProgressPercentage;
};
worker.RunWorkerCompleted += (s, args) =>
{
progressBar1.Value = 0;
};
worker.RunWorkerAsync();
}