У меня есть следующий код, начинающийся robocopy
как Process
. Мне также нужно делать запросы базы данных, чтобы определить, какие каталоги мне нужно копировать каждый раз, когда robocopy
вызывается так, что я использовал ProcessStartInfo
для управления переданными аргументами.Как повторно использовать экземпляр процесса с несколькими разными экземплярами ProcessStartInfo?
internal class Program
{
private static void Main(string[] args)
{
using (var context = new MyDbContext())
{
IEnumerable<ProcessStartInfo> processInfos = GetProcessInfos(context, args[0]);
foreach (ProcessStartInfo processInfo in processInfos)
{
// How can I reuse robocopy Process instances and
// how can I dispose of them properly?
Process.Start(processInfo);
}
}
}
private static IEnumerable<ProcessStartInfo> GetProcessInfos(MyDbContext context,
string directory)
{
const string defaultRobocopyFormatString = "{0} {1} /mir /tee /fft /r:3 /w:10 /xd *Temp*";
var directoryInfo = new DirectoryInfo(directory);
return from dir in directoryInfo.GetDirectories()
from myEntity in context.MyEntities
where dir.Name == myEntity.Name
select new ProcessStartInfo("robocopy",
string.Format(defaultRobocopyFormatString,
Path.Combine("C:\Test", dir.Name),
Path.Combine("C:\Test_bak", dir.Name)));
}
}
Как можно повторно использовать Process
экземпляры, возвращенные static
Process.Start(ProcessStartInfo)
внутри цикла foreach
и как я могу Dispose
их правильно?
Что именно вы подразумеваете под «повторным использованием» экземпляров «Процесс»? Вы можете распоряжаться ими должным образом, вызывая 'Dispose' (или используя' using') ... – vesan
@vesan. По моему мнению, 'Process.Start (ProcessStartInfo)' запускает новый 'Процесс' каждый раз, когда он вызывается, я хотите, чтобы только один процесс robocopy был запущен с различными переданными в него аргументами, возможно ли это? – rexcfnghk
Если «robocopy» (я не очень хорошо разбираюсь в нем) сам поддерживает несколько переданных наборов аргументов, тогда вам нужно начать новый процесс для каждой итерации. – vesan