PDA

View Full Version : سوال: ساخت فرم Please Wait با استفاده از thread



eshaghrahimy
سه شنبه 04 تیر 1392, 15:43 عصر
سلام
من میخوام یک فرم please Waite درست کنم که وقتی داخل فرم اصلی برنامه فرم هایی که طول می کشه تا باز بشن، تا باز شدن اون فرمها فرم please Wait به کاربرنشون داده بشه و وقتی فرم کامل لود شد این فرم بسته بشه با ترد که خودم می نویسم هر دو فرم با هم باز میشن

eshaghrahimy
سه شنبه 04 تیر 1392, 21:37 عصر
کسی از دوستان راه حلی واسه این کار نداره

مهران چمنی
سه شنبه 04 تیر 1392, 23:39 عصر
از تایمر استفاده کن
باعث میشه هردو فرم همزمان باز نشوند

eshaghrahimy
چهارشنبه 05 تیر 1392, 09:08 صبح
تایمر راه حل بهینه نیست برای این کار

neverlieme
چهارشنبه 05 تیر 1392, 10:24 صبح
تایمر راه حل بهینه نیست برای این کار

درسته. با تایمر میشه بعد یه زمان مشخصی یه کارو انجام داد. ولی لود شدن یه پروژه زمان مشخصی نداره بنابر این باید یه حالت دینامیک داشته باشه که با توجه به زمان لود شدن عمل بکنه

Pr0grammer
چهارشنبه 05 تیر 1392, 22:09 عصر
با سلام...

این کار لزوماً نیاز نیست با Thread نوشته بشه ؛ بنده خودم هم این کار رو توی دو - سه تا پروژه انجام داده بودم.
من دقیقاً نمی دونم شما منظورتون از لود صفحه چیه؟! معمولاً Application مثل صفحات Web نیست که همه چیزش طول بکشه ؛ فقط ابزارهایی مثل DataGridview برای اتصال با بانک و پر شدنشون ممکنه چند ثانیه طول بکشن ؛ پیشنهاد من اینه که شما همه ابزارهایی که رو فرم دارید رو Hide کنید و با دستور Application.DoEvents به اجرای بقیه کدهاتون در FormLoading برسید (فقط یه عکس gif به منظور Loading نشون داده بشه) و در نهایت بعد از پایان دستورات، اونها رو Show کنید...

با این حال اگر می خواین با Thread بنویسید هم میشه با یه متغیر کمکی (البته به صورت Public) بررسی کرد که دستورات کی به پایان رسیده و باید فرم Loading رو بست...

موفق باشید/

eshaghrahimy
چهارشنبه 05 تیر 1392, 22:43 عصر
اگه ممکنه میتونید یه نمونه کدی بزارید
میخوام با thread باشه چون برنامه ای که دارم جاهای زیادی باید استفاده بشه پروژه ام حدود 200 تا فرم داره

eshaghrahimy
چهارشنبه 05 تیر 1392, 22:51 عصر
میخوام یک فرم please wait داشته باشم و هرکجا که نیاز شد اونو صدا بزنم فکر می کنم thread بهترین راه حل باشه اگه بتونم پیاده سازیش کنم

Mani_rf
چهارشنبه 05 تیر 1392, 22:53 عصر
(با احترام به نظر دوستان)
به نظرم نیازی به thread نیست؛
فرم دوم رو به عنوان یک فرم Pop Up در نظر بگیر که هروقت خواستی بازش کنی. میتونی یک پروگروس بار هم روی اون قرار بدی. هرجا که لازم شد ShowDialog کنش؛ کارشم که تموم شد Dispose کن. برای اینکه هنگ نکه همه به جای صدا زدن thread تو حلقه از Application.DoEvents استفاده کن.

ali.rk
پنج شنبه 06 تیر 1392, 00:05 صبح
با thread نمی شه یا سخته . در ضمن کار اصلی thread مکثه
از timer استفاده کن توش کد نمایش عکس gif مخصوص انتضار یا اصلا کد زیر رو بنویس

If Label1.Visible = False Then

Label1.Visible = True

End If
If lot = 1 Then
Label1.Text = " . لطفا صبر کنید "

lot = 2
Else

If lot = 2 Then

Label1.Text = " .. لطفا صبر کنید "



lot = 3

Else
If lot = 3 Then

Label1.Text = " ... لطفا صبر کنید "



lot = 1


End If

End If

End If

یه لیبل بنداز تو فرمت ... زمان تایمر هم 500 تا 1000 بذار ... شروع کار سنگینه بگو ای تایمره فعال شه
زمان پایان رو هم بگو تایمره ولیبله رو off کنه همین

eshaghrahimy
پنج شنبه 06 تیر 1392, 06:43 صبح
(با احترام به نظر دوستان)
به نظرم نیازی به thread نیست؛
فرم دوم رو به عنوان یک فرم Pop Up در نظر بگیر که هروقت خواستی بازش کنی. میتونی یک پروگروس بار هم روی اون قرار بدی. هرجا که لازم شد ShowDialog کنش؛ کارشم که تموم شد Dispose کن. برای اینکه هنگ نکه همه به جای صدا زدن thread تو حلقه از Application.DoEvents استفاده کن.


ممنون از لطفتون اگه امکانش هست می تونید یک نمونه کد بزارید ممنونم

h_a_m_i_d
پنج شنبه 06 تیر 1392, 15:10 عصر
با thread نمی شه یا سخته . در ضمن کار اصلی thread مکثه
از timer استفاده کن توش کد نمایش عکس gif مخصوص انتضار یا اصلا کد زیر رو بنویس

If Label1.Visible = False Then

Label1.Visible = True

End If
If lot = 1 Then
Label1.Text = " . لطفا صبر کنید "

lot = 2
Else

If lot = 2 Then

Label1.Text = " .. لطفا صبر کنید "



lot = 3

Else
If lot = 3 Then

Label1.Text = " ... لطفا صبر کنید "



lot = 1


End If

End If

End If

یه لیبل بنداز تو فرمت ... زمان تایمر هم 500 تا 1000 بذار ... شروع کار سنگینه بگو ای تایمره فعال شه
زمان پایان رو هم بگو تایمره ولیبله رو off کنه همین
این چیه :افسرده:
If lot <= 3 Then
lbl.Text = "لطفا صبر کنید" + StrDup(lot, ".")
lot += 1
Else
lot = 0
End If

ali.rk
پنج شنبه 06 تیر 1392, 15:53 عصر
اینم درسته ولی من این طوری رو بیشتر دوست دارم . :چشمک:

h_a_m_i_d
پنج شنبه 06 تیر 1392, 16:04 عصر
کدنویسی بهینه اولین گام برای نوشتن پروژه های بزرگ هست
اگر پروژه بزرگ باشه اصلا نمیشه با این کدها کار کرد باید سعی کرد هرچی میشه کد رو بهینه تر نوشت

ali.rk
پنج شنبه 06 تیر 1392, 20:05 عصر
ممنونم حمید جان ولی من دانش آموزم و فقط برای تفریح برنامه نویسی می کنم . تا حالا هم کتاب برنامه نویسیی در مورد vb.net نخوندم .
ولی در کل دستت درد نکنه هر وقت برنامه نویس شدم حتما کد ها رو خلاصه و بهینه می کنم . (بیشتر دوست دارم مشکلات برنامه نویسی کار کنم)

mahtab200711
سه شنبه 09 مهر 1392, 11:06 صبح
با سلام...

این کار لزوماً نیاز نیست با Thread نوشته بشه ؛ بنده خودم هم این کار رو توی دو - سه تا پروژه انجام داده بودم.
من دقیقاً نمی دونم شما منظورتون از لود صفحه چیه؟! معمولاً Application مثل صفحات Web نیست که همه چیزش طول بکشه ؛ فقط ابزارهایی مثل DataGridview برای اتصال با بانک و پر شدنشون ممکنه چند ثانیه طول بکشن ؛ پیشنهاد من اینه که شما همه ابزارهایی که رو فرم دارید رو Hide کنید و با دستور Application.DoEvents به اجرای بقیه کدهاتون در FormLoading برسید (فقط یه عکس gif به منظور Loading نشون داده بشه) و در نهایت بعد از پایان دستورات، اونها رو Show کنید...

با این حال اگر می خواین با Thread بنویسید هم میشه با یه متغیر کمکی (البته به صورت Public) بررسی کرد که دستورات کی به پایان رسیده و باید فرم Loading رو بست...

موفق باشید/





میشه لطفا یک نمونه کد از این روشی که فرمودید بگذارید
من هر کار کردم نتونستم روش شما رو اجرایی کنم