我试图调用一个方法传递不同的值来压缩文件夹,我使用线程来处理同一方法的多次运行..
列出一个列表框,其中包含要处理的待处理作业,system.timer用于每30秒检查一次列表框的内容并处理列表中的所有作业。
该过程涉及从列表中获取记录..其中包含zip文件名,将在当前目录中提取zip文件。
我的问题是..当我有多个线程尝试解压缩文件时,我最终只能解压缩1个文件夹,例如..第一个调用应该解压缩folder1,第二个调用应该解压缩folder2,但是当system.timer处理列表的内容时...我总是得到1个解压缩的文件夹。
每次程序启动时,列表将填充2个条目,如果我只在列表中放置folder1条目,则folder1得到解压缩,如果我在列表中放置folder2条目,则folder2得到解压缩,所以我知道有条目没有问题。
下面是我的代码示例:
private void JobStarterTimerEvent(object source, ElapsedEventArgs e)
{
foreach (JobModel jm in ListofWaitingBackupJobs)
{
if (jm.Status.DataValue == "Waiting")
{
//check if the server has a pending job running ...
// add this check later
ThreadPool.QueueUserWorkItem(StartJob, jm);
}
}
}
private void StartJob(object job)
{
string outputdirectory;
outputdirectory = System.IO.Directory.GetCurrentDirectory();
ProcessStartInfo p2 = new ProcessStartInfo();
p2.FileName = "7za.exe ";
p2.Arguments = "x " + backupname + " -o" + @outputdirectory + " -y";
p2.WindowStyle = ProcessWindowStyle.Hidden;
Process x2 = Process.Start(p2);
x2.WaitForExit();
}
答案 0 :(得分:1)
您似乎使用相同的输出目录。正如Jon所暗示的那样,您可能希望使用该参数来确定要解压缩到的相关唯一文件夹。
答案 1 :(得分:0)
我的错误..对象作业被转换为Jobmodel ... 我解决了这个问题..我在类的顶部声明了backupname.so每次调用StartJob方法..都读取最新的backupname变量..我应该在StartJob方法中声明backupname作为局部变量。