Я вызываю пакет SSIS из моего кода C#. Пакет обрабатывает один за другим файл и удаляет его из определенной папки.
Поскольку пакет обрабатывает один файл за другим, я хочу отображать прогресс на индикаторе выполнения.
Я написал эту функцию для получения прогресса:
private void fileIteration(string folderPath)
{
int initialFileCount, fileCount, processCount;
initialFileCount = Directory.GetFiles(folderPath, "*.*", SearchOption.TopDirectoryOnly).Length;
this.Invoke(new MethodInvoker(delegate (){ progressBar1.Value = initialFileCount;}));
if (initialFileCount > 0)
{
fileCount = Directory.GetFiles(folderPath, "*.*", SearchOption.TopDirectoryOnly).Length;
while (fileCount != 0)
{
// Thread.Sleep(2000);
fileCount = Directory.GetFiles(folderPath, "*.*", SearchOption.TopDirectoryOnly).Length;
processCount = initialFileCount - fileCount;
this.Invoke(new MethodInvoker(delegate () { progressBar1.Increment(processCount); }));
initialFileCount = initialFileCount + processCount;
}
}
}
Поскольку обе задачи должны выполняться параллельно, я вызываю вот так:
Parallel.Invoke(
() => fileIteration(folderPath),// for prgressbar
() => results = package.Execute()); // for calling package
Однако обе у меня не работают вместе. Я пытался сохранить 100 файлов и оставил папку открытой, чтобы перекрестно проверить, из-за того, что быстрый процесс не позволяет мне видеть индикатор выполнения. Это не так. Есть предложения?