PDA

View Full Version : سوال: گذاشتن Thread به جای DoEvent برای درست کردن پروگرس بار



forodo
دوشنبه 16 دی 1392, 20:47 عصر
سلام
من کدهای زیر رو نوشتم که تمام فولدرهای یک مسیر رو به من نشون می ده.
وقتی که داره سرچ رو انجام می ده همزمان با عمل سرچ یک پروگرس بار پر میشه که نمایش میده.
ولی می خوام به جای استفاده از Application.DoEvents(); از Thread استفاده کنم ولی هرکاری می کنم نمی دونم چه تابعی رو در کجا باید در چه Threadای قرار بدم!!!
خیلی دستکاری کردم نشد. حتی خواستم با BackgrounWorker کار کنم ولی با اون هم نتونستم.
لطفاً بگید چطور می تونم کدهای زیر رو با Thread درست کنم که هم سرچ انجام بشه و هم پر شدن پروگرس بار رو ببینم.
با تشکر

// پیدا کردن فیلمها
public static void Film(string AGL, RadGridView RGV, RadProgressBar RPB)
{
// پاک کردن تمام سطرهای ردگریدویو
RGV.Rows.Clear();
// شمارنده برای اینکه مقداری به ارتفاع هر سطر داده شود
int RowCountFilm = 0;
// دادن تعداد تعداد فولدرهای موجود به ماکزیمم ردپروگرس بار
RPB.Maximum = FolderCount(AGL);
// پیداکردن مسیرهای عنوان مورد نظر
foreach (string Masir in Directory.GetDirectories(@"E:\Films", AGL, SearchOption.AllDirectories))
{
// پیداکردن تمامی فولدرهای داخل مسیر پیدا شده
foreach (string FolderFilm in Directory.GetDirectories(Masir, "*.*", SearchOption.AllDirectories))
{
// فیلتر کردن نتایج فولدرهای پیدا شده
if (Path.GetFileName(FolderFilm) != "D & S" && Path.GetFileName(FolderFilm) != "Subtitle" && Path.GetFileName(FolderFilm) != "Doubleh")
{
try
{
// اضافه کردن مقدار پروگرس بار برای پرشدن
RPB.Value1 += 1;
// اضافه کردن سطر به ردگریدویو
// سایز فولدر پیدا شده (#####) تبدیل تاریخ فولدر پیدا شده به تاریخ شمسی (#####) مسیر فولدر پیدا شده (#####) نام فولدر پیدا شده
RGV.Rows.Add(Path.GetFileName(FolderFilm), FolderSize(FolderFilm), ConvertMiladiToShamsi(FolderFilm), Image.FromFile(FolderFilm + "\\FolderMarker.ico"), FolderFilm);
// تغییر سایز ستون عکس
RGV.Rows[RowCountFilm].Height = 350;
// اضافه کردن یک واحد به شمارنده برای اینکه مقداری به ارتفاع هر سطر داده شود
RowCountFilm++;
Application.DoEvents();
}
catch (Exception)
{
// در صورت پیدا نکردن آیکون فیلم
switch (AGL)
{
case "Action":
RGV.Rows.Add(Path.GetFileName(FolderFilm), FolderSize(FolderFilm), ConvertMiladiToShamsi(FolderFilm), Image.FromFile(AppDomain.CurrentDomain.BaseDirecto ry + "Action.ico"), FolderFilm);
RGV.Rows[RowCountFilm].Height = 350;
RowCountFilm++;
break;
}
}
}
}
}
// رفتن اسکرول بار به اولین سطر
RGV.TableElement.ScrollToRow(0);
// صفر شدن مقدار ردپروگرس بار
RPB.Value1 = 0;
}

forodo
سه شنبه 17 دی 1392, 10:50 صبح
دوستان من با توضیحات هم نوشتم که متوجه کدها بشید.
در خط 30 به جای اون قطعه کد می خوام از thread استفاده کنم.
لطفاً راهنمایی کنید.