林試圖調用傳遞不同的值來壓縮文件夾的方法傳遞的值,使用線程來處理同樣的方法的多個運行IM相同的方法..調用具有使用線程
列表框填充了待處理作業進行處理,並使用system.timer每30秒檢查一次列表框的內容並處理列表中的所有作業。
該過程涉及從列表中獲取記錄..其中包含zip文件名zip文件將在當前目錄中提取。
我的問題是..當我有超過1個線程試圖解壓文件時,我只能得到1個文件夾解壓縮,例如..第一個電話應該解壓縮folder1,第二個電話應該解壓縮folder2 ,但是當system.timer處理列表的內容..我總是得到1個解壓縮的文件夾。
每次程序啓動時,如果我只將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();
}
在你的'StartJob'方法中,你*完全*忽略'job'參數的值。目前還不清楚你想用它來做什麼...... – 2011-06-06 12:26:41
我不會使用列表框來跟蹤工作。閱讀關於盜取作業系統的工作,並使用synclock在隊列/堆棧周圍實現它。也許所有的工作都開始相同的過程。 – CodingBarfield 2011-06-06 12:35:33