PDA

View Full Version : لود در Background



regbyte
سه شنبه 13 شهریور 1386, 12:17 عصر
با سلام
من یک SpalshScreen دارم می خوام وقتی اون در حال نمایشه، صفحه اصلی برنامه ام لود بشه(چون یه مقدار زمان گیره)
برای SpalshScreen یک تایمر گذاشتم، تا مثلا بعد از 5 ثانیه صفحه اصلی رو نمایش بده، می خوام در این 5 ثانیه صفحه اصلی لود بشه تا تاخیری پیش نیاد.

hdv212
سه شنبه 13 شهریور 1386, 12:50 عصر
ابتدا یه کامپوننت BackgroundWorker به فرم اصلیتون که میخواهید لود بشه اضافه میکنید و اطمینان حاصل کنید که خاصیت WorkerReportProgress روی true تنظیم شده باشه.
به قسمت event های این کامپوننت Switch کنید، سه event وجود داره که به اختصار هرکدوم رو توضیح میدم :

1. DoWork :
این رویداد دقیقا عملیاتی رو که میخواهید به صورت Background انجام بدید رو فعال میکنه (یعنی خودش fire میشه)، پس کد مربوط به لود کردن فرم و داده ها رو باید اینجا بنویسید.

2. ProgressChanged :
این رویداد زمانی fire میشه که عملیات شما تا اونجایی که شما مشخص کردید انجام شده باشه (معمولا در هر حلقه یک بار) که همانطور هم که از نامش پیداست میزان کامل شدن thread رو به اطلاع ما میرسونه، البته از این رویداد میتونید استفاده نکنید ولی در صورت استفاده از این رویداد باید با توجه به الگوریتم پردازشی خودتون در رویداد DoWork، به وسیله ی تابع BackgroundWorker.ReportProgress() اون رو fire کنید و پارامترهای مورد نیاز رو بهش پاس کنید.
معمولا update کردن userInterFace رو در این رویداد مینویسید.

3. RunWorkerCompleted :
همانطور که از نامش پیداست زمانی fire میشه که thread شما به پایان رسیده باشه و شما بخواهید یه سری از کارها رو در این رویداد انجام بدید(مثل rset کردن progressBar یا دادن اطلاع به کاربر مبنی بر به پایان رسیدن عملیات)، البته شما ملزم به استفاده از این رویداد نیستید.
موفق و پیروز باشید.

regbyte
سه شنبه 13 شهریور 1386, 17:43 عصر
با تشکر
من از DoWork استفاده کردم، اما متاسفانه کار نکرد!


privatevoid backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Form2 f2 = newForm2();
f2.Show();
MessageBox.Show("S");
}

آیا کار دیگری نیز باید انجام بدهم؟

regbyte
شنبه 17 شهریور 1386, 10:40 صبح
میشه یه مثال بزنید.

Amir Oveisi
شنبه 17 شهریور 1386, 17:27 عصر
با BackgroundWorker حتما میشه!
اگه بخواین همه چی رو خودتون کنترل کنید میتونین مستقیما از یه thread دیگه استفاده کنید که عمل splashing رو انجام بده

danial82
شنبه 01 دی 1386, 06:16 صبح
یه مثال میشه بزنی که از BackgroundWorker استفاده کرده باشی؟

اَرژنگ
شنبه 01 دی 1386, 08:08 صبح
بیزحمت یکی یک پروژه ساده برایه اینکار آپلود کند
ممنون

سار
شنبه 01 دی 1386, 09:45 صبح
این از MSDN هست
http://msdn2.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx