У меня есть несколько файлов .exe, которые я запускаю следующим образом:
public void RunCalculator(Calculator calculator)
{
var query = Path.Combine(EpiPath, calculator.ExeName + ".exe");
if (File.Exists(Path.Combine(EpiPath, "ffs.exe")))
{
var p = new Process();
p.StartInfo.FileName = query;
p.StartInfo.WorkingDirectory = EpiPath;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.Arguments = String.Join(" ", calculator.Arguments);
p.Start();
p.WaitForExit();
}
else throw new InvalidOperationException();
}
Этот код работает, но все еще некоторое мерцание вызвано тем, что exe-s запускается несколько раз. Есть ли способ удалить мерцание, потому что это действительно раздражает пользователей, чтобы испытать его, так как это происходит в течение нескольких секунд (есть довольно много exe, которые выполняются).
Я попытался использовать задачу для этого в другом потоке, но поскольку каждый exe зависит от работы над предыдущим (он записывает файл), я получаю исключение IO.
Также кажется, что файлы exe работают только в том случае, если их ProcessPriority установлен в Realtime.
Edit:
Несколько подробнее о том, что я пробовал в последнее время: Поскольку @Jack Hughes предположил, что я попытался использовать фонового работника для решения этой проблемы:
Вот что я сделал:
Я вызываю функцию RunWorkerAsync() для рабочего фона, которая на ней вызывает функцию RunCalculator для каждого из калькуляторов в порядке. Мерцание все еще сохраняется.
Edit2: Я создал подробный репозиторий, который содержит мой способ запуска exe файлов, exe файлов и класса ProcessHelper, который предложил Old Fox. Вы можете найти инструкции по использованию репозитория внутри файла README.
Ссылка на репозиторий: https://github.com/interdrift/epiwin-flick