Could anyone here check my code.
Methods still not yet finish on processing things
but Backgroundworker completed the process already.
bg.DoWork += Bg_DoWork;
bg.RunWorkerCompleted += (object ss, RunWorkerCompletedEventArgs ee) =>
{
_sysLog("Successfully uploaded.", Color.Green);
};
bg.RunWorkerAsync();
Background Worker do the Work.
private void Bg_DoWork(object sender, DoWorkEventArgs e)
{
var files = Folder.GetFileToPublicFolder(Folder.srcFolder);
foreach (var chunk in files.Split(10))
{
foreach (var item in chunk)
{
File.Move(Path.Combine(Folder.srcFolder, item.Name), Path.Combine(Folder.tmpFolder, item.Name));
}
ProcessParallelThread(e);
}
}
Parallel Thread will process all the files in the public folder.
private void ProcessParallelThread(DoWorkEventArgs e)
{
object LockObject = new object();
var Files = Folder.GetFileToPublicFolder(Folder.tmpFolder);
Parallel.ForEach(Files, new ParallelOptions { MaxDegreeOfParallelism = 10 }, xFile =>
{
lock (LockObject)
{
bg.ReportProgress(0, Thread.CurrentThread.ManagedThreadId + " :(" + xFile + ") : Started ");
}
try
{
UploadFile(xFile);
Thread.Sleep(1000);
lock (LockObject)
{
bg.ReportProgress(0, Thread.CurrentThread.ManagedThreadId + " :(" + xFile + ") : Ended =>>");
}
}
catch (Exception)
{
bg.ReportProgress(0, Thread.CurrentThread.ManagedThreadId + " :(" + xFile + ") : Error X___X");
}
});
}
this uploadfile will be processed based of how many thread and needs to be done.
private void UploadFile(FileInfo file)
{
var slicePDF = new PDFSplitter();
var pdf = slicePDF.SplitPdf(file);
var poExist = new POProcess();
if (poExist.checkPO(pdf.pono).Result)
{
bg.ReportProgress(0, Thread.CurrentThread.ManagedThreadId + " :(" + file.Name + ") : File Exist X___X");
File.Delete(Folder.tmpFolder + "\\" + file.Name);
}
else
{
var processPDF = new FTPProcess();
var link = processPDF.uploadPDF(Folder.tmpFolder + "\\" + file.Name, pdf.sid).Result;
if (link == "Error")
{
bg.ReportProgress(0, Thread.CurrentThread.ManagedThreadId + " :(" + file.Name + ") : Link Error X___X");
MoveToErrFolder(file);
}
else
{
var po = new PO();
po.sid = pdf.sid;
po.pono = pdf.pono;
po.region = pdf.region;
po.location = pdf.location;
po.division = pdf.division;
po.link = link;
po.filestatus = "Available";
po.released = DateTime.Now;
po.expiration = DateTime.Now.AddDays(7);
po.isExpired = "no";
if (poExist.addPO(po).Result)
{
bg.ReportProgress(0, Thread.CurrentThread.ManagedThreadId + " :(" + file.Name + ") : Success");
Folder.CreateBackFolder(Folder.bckFolderPath);
File.Move(Folder.tmpFolder + "\\" + file.Name, Folder.bckFolderPath + "\\" + file.Name);
}
else
{
bg.ReportProgress(0, Thread.CurrentThread.ManagedThreadId + " :(" + file.Name + ") : Error in Database X___X");
MoveToErrFolder(file);
}
}
}
}
thank you in advance!