PDA

View Full Version : سوال: پر شدن progressbar با توجه به پیشرفت انجام یک برنامه



sharhanee
جمعه 12 تیر 1394, 14:44 عصر
سلام دوستان
من یه سوال دارم که هر چی چرخیدم نتونستم جواب این سوالم رو پیدا بکنم و سوالم اینه که من میخوام progressbar رو با توجه به پیشرفت یک فرایند پر بشه ، نه اینکه خودش همینطوری از 0 تا 100 پر بشه و دستورات من هنوز در حال اجرا باشه و به اتمام نرسیده باشه و کد های من بصورت زیر هست :

System.Diagnostics.ProcessStartInfo pf = new ProcessStartInfo("cmd");
pf.RedirectStandardInput = true;
pf.RedirectStandardOutput = true;
pf.UseShellExecute = false;
pf.CreateNoWindow = true;
pf.WindowStyle = ProcessWindowStyle.Hidden;
System.Diagnostics.Process pc = System.Diagnostics.Process.Start(pf);
pc.StandardInput.WriteLine(comm);
pc.StandardInput.WriteLine(@"attrib -s -h /s /d **");
pc.StandardInput.WriteLine(@"exit");
string output = pc.StandardOutput.ReadToEnd();

من با استفاده از کدهای بالا در سی شارپ اومدم فایل هایی که ویروس مخفی کرده رو اشکار کردم اما میخوام اگر حجم اون درایوی که داره عملیات اشکار سازی روی اون انجام میشه زیاد باشه و مثلاً 6GB باشه ، اون مدت زمانی که طول میکشه تا این کار انجام بشه ، از طریق پرشدن تدریجی progressbar به کاربر نشون بدیم .
دوستان خواهشا کمکم کنید خیلی بهش احتیاج دارم :گریه::گریه::گریه:

shahryari
جمعه 12 تیر 1394, 18:32 عصر
برای برداشتن خاصیت سیستمی و هیدن فایل ها در دات نت متد وجود داره File.SetAttributes
شما در کد بالا توسط دستورات کامند اینکار و میکنید که نمیشه پیشرفت کار رو به کاربر نشون داد
اگه در حلقه فایلهای مربوطه راپیمایش کنید و توسط متد های خود دات نت خاصیت سیستمی و هیدن بودن فایل رو بردارید ، میتونید پیشرفت کار رو به کاربر نشون بدید

بعنوان مثال:
string[] fileList = System.IO.Directory.GetFiles("D://test");
progressBar1.Maximum = fileList.Length;
foreach (string file in fileList)
{
System.IO.File.SetAttributes(file, System.IO.FileAttributes.Normal);
progressBar1.Value++;
}