PDA

View Full Version : سوال: آیا روش استفاده از Thread در اینجا درسته؟



forodo
جمعه 20 دی 1392, 17:17 عصر
سلام
من می خوام وقتی که فرم داره لود می شه همزمان با اون کد دیگری اجرا بشه.
آیا درست استفاده کرده ام؟

private void Form1_Load(object sender, EventArgs e)
{
Thread tt = new Thread(new ThreadStart(aaaaaaaa));
tt.Start();
}


private void aaaaaaaa()
{
// شمارنده برای تعدا فولدر
int ActionFilmFolder = 0;
// پیداکردن مسیرهای عنوان مورد نظر
foreach (string Masir in Directory.GetDirectories(@"E:\Films", "Action", 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")
{
// اضافه شدن یک واحد به شمارنده برای تعداد فولدر
ActionFilmFolder += 1;
Thread.Sleep(0);
}
}
}
// ریختن تعداد فولدرهای پیدا شده در متغیر تعریف شده
FindFilm.ActionFilm = ActionFilmFolder;
// نمایش پیغام برای اتمام کار
MessageBox.Show("Enjoy!", "Film", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}

drsina
جمعه 20 دی 1392, 23:15 عصر
توو استفاده از thread مشکلی نیست ، ولی اگه Static کار کنی بهتره .

Mahmoud.Afrad
شنبه 21 دی 1392, 00:50 صبح
توو استفاده از thread مشکلی نیست ، ولی اگه Static کار کنی بهتره .
منظورت از static چیه و چه ربطی به thread داره؟!

mansour01
شنبه 21 دی 1392, 01:24 صبح
منظورت از static چیه و چه ربطی به thread داره؟!
منظور ایشون این هست که بصورت موازی پردازش ایجاد نکنی

forodo
شنبه 21 دی 1392, 12:36 عصر
منظور ایشون این هست که بصورت موازی پردازش ایجاد نکنی
یعنی چی به صورت موازی.
و سوال دیگه اینکه من Thread.Sleep(0); صفر گذاشتم اشکالی نداره؟ سریعترین حالتی که بشه اون کدام انجام بشه همینه که صفر بذارم یا چیزه دیگه ای می شه گذاشت؟
یا اصلاً از Backgroundworker استفاده کنم بهتره؟ چون با اونم تست کردم و شد و شروع کار رو هم در

public Form1()
{
InitializeComponent();
// اجرای بک گرویندورکر
backgroundWorker1.RunWorkerAsync();
}

گذاشتم چون می خواستم قبل از اینکه حتی لود فرم اجرا بشه کدام اجرا بشه.
کدومش بهتره؟

forodo
شنبه 21 دی 1392, 12:39 عصر
توو استفاده از thread مشکلی نیست ، ولی اگه Static کار کنی بهتره .
یعنی هم رویداد فرم رو static کنم و هم تابعم رو؟

Mousavmousab
شنبه 21 دی 1392, 17:18 عصر
کار هایی را با thread می نویسن که مراحل انجام کار مهم نباشه مثلاٌ شما می خواهید یک فیلم را تبدیل کنید به یک پسوند دیگه و من تعجب کردم انتهای تابع aaaaa چرا از MessageBox استفاده شد؟
چون وقتی MessageBox اجرا بشه کار بر باید روی دکمه کلیک کنه وگرنه برنامه دچار اختلال میشه برنامه های ترد نباید با کاربر تعامل داشته باشه باید Background انجام بشه
موفق باشید

forodo
شنبه 21 دی 1392, 19:24 عصر
کار هایی را با thread می نویسن که مراحل انجام کار مهم نباشه مثلاٌ شما می خواهید یک فیلم را تبدیل کنید به یک پسوند دیگه و من تعجب کردم انتهای تابع aaaaa چرا از MessageBox استفاده شد؟
چون وقتی MessageBox اجرا بشه کار بر باید روی دکمه کلیک کنه وگرنه برنامه دچار اختلال میشه برنامه های ترد نباید با کاربر تعامل داشته باشه باید Background انجام بشه
موفق باشید
اون مسیج باکس رو برای خودم گذاشتم چون می خواستم ببینم چقدر طول می کشه تا اجرای تابعم تمام بشه.
بعداً برداشته خواهد شد.

forodo
یک شنبه 22 دی 1392, 08:53 صبح
دوستان از BackgroundWorker استفاده کنم یا از Thread؟

مهرداد صفا
یک شنبه 22 دی 1392, 12:41 عصر
و سوال دیگه اینکه من Thread.Sleep(0); صفر گذاشتم اشکالی نداره؟ سریعترین حالتی که بشه اون کدام انجام بشه همینه که صفر بذارم یا چیزه دیگه ای می شه گذاشت؟


سلام دوست خوبم.
سعی کنید قبل از اینکه از کد یا متودی استفاده کنید، کاربرد و نحوه استفاده اش رو درک کنید در غیر اینصورت....
متود Sleep برای ایجاد وقفه در Thread مورد استفاده قرار می گیرد. شاید توقف کمتر باعث سرعت بیشتر کار Thread باشد، ولی زمانی که نیازی به توقف نداریم نیازی به متود Sleep هم نداریم.
توقف 0 ملی ثانیه ای برابر با توقف نکردن است! در نتیجه این کد اثری ندارد و اضافه است.