PDA

View Full Version : مشکل در استفاده از تایمر



omidgold
چهارشنبه 31 فروردین 1390, 20:41 عصر
من میخوام یک لیست باکس درست کنم که از زمانی که یک آیتم بهش اضافه شد 4 ثانیه بعدش حذف بشه.
توی این مشکل دارم که هر آیتم باید یک تایمر داشته باشه
یه جور نمیشه با یدونه تایمر یا روش دیگه ای این کار را کرد؟

bnnoor
پنج شنبه 01 اردیبهشت 1390, 10:30 صبح
من میخوام یک لیست باکس درست کنم که از زمانی که یک آیتم بهش اضافه شد 4 ثانیه بعدش حذف بشه.
توی این مشکل دارم که هر آیتم باید یک تایمر داشته باشه
یه جور نمیشه با یدونه تایمر یا روش دیگه ای این کار را کرد؟

بیشتر توضیح بدید؟ لیست باکس شما فقط یک آیتم داره یا نه تعداد زیاده؟ اگر یک آیتم داره میتونید دستوری توی تایمر بنویسید که هر از چهارثانیه اخرین آیتم اضافه شده رو پاک کنه در ضمن اینتروال رو به 4000 تنظیم کنید

ژوپیتر
پنج شنبه 01 اردیبهشت 1390, 10:42 صبح
شما میتونید از thread استفاده کنید، ام اگه براتون امکان پذیر نیست، از تایمر به صورت Dynamic استفاده کنید نه Static، یعنی با نوشتن یک فانکشن که در اون آیتمی به لیست باکس اضافه میشه یک تایمر هم برای اون ساخته بشه با اینتروال 4 ثانیه و کال بک تایمر فانکشن پاک کردن اون آیتم از لیست باکس باشه و تایمر رو هم free کنه.

hossein-khoshseyar
پنج شنبه 01 اردیبهشت 1390, 12:14 عصر
نیازی به ترد نیست
یعنی اگه بخوای می تونی با یک تایمر مشکل رو حل کنی
بهتره یه آرایه از زمان داشته باشی به تعداد لیست باکست
بعد در زمان اضافه شدن اون آیتم زمان رو توی آرایه بنویسی
بعد یه تایمر بزاری که هر یک ثانیه بیاد چک کنه ببینه از این آرایه کدومیکی زمانش از 4 ثانیه گذشته و اون رو پاک کنه

omidgold
پنج شنبه 01 اردیبهشت 1390, 16:03 عصر
ممنون از پاسخ هاتون اما چند مسئله:
اولا اینکه تعداد ورودی ها مشخص نیست
ثانیا اینکه در حالی که یک داده خارج میشه ممکنه یکی وارد بشه یعنی زمان خروج مشخصه اما زمان ورود دده نامعلومه. شاید زمان ها با هم همپوشانی داشته باشند. مثلا (امید) میره توی لیست. بعد از 2 ثانیه (حمید) وارد میشه. دو ثانیه بعد باید (امید) خارج بشه. و دو ثانیه دیگه باید (حمید) خارج بشه.
فکر کنم روشی که (ژوپیتر) گفتند روش عالی ایه. اما من ترد کار نکردم. میشه کدش را زحمت بکشید. یعنی من چجوری برای هر ورودی یک تایمر درست کنم و دستور پاک شدن را در تایمر بزارم. متشکرم

omidgold
پنج شنبه 01 اردیبهشت 1390, 16:05 عصر
شما میتونید از thread استفاده کنید، ام اگه براتون امکان پذیر نیست، از تایمر به صورت Dynamic استفاده کنید نه Static، یعنی با نوشتن یک فانکشن که در اون آیتمی به لیست باکس اضافه میشه یک تایمر هم برای اون ساخته بشه با اینتروال 4 ثانیه و کال بک تایمر فانکشن پاک کردن اون آیتم از لیست باکس باشه و تایمر رو هم free کنه.

میشه کدش را برام بنویسید
من تا حالا با نخ ها کار نکردم.

ژوپیتر
یک شنبه 04 اردیبهشت 1390, 14:34 عصر
http://www.startvbdotnet.com/threading/default.aspx

غلامرضا شریفی
یک شنبه 04 اردیبهشت 1390, 14:57 عصر
دوست عزيز هر گاه يك ايتم اضافه ميشود يك تايمر با همان نام درست شود و Interval آن را براي 4 ثانيه تنظيم كنيد بعد از 4 ثانيه خود تايمر خودش را Dispose مند
يا هر ايتم كه ايجاد شد يك integer با آن نام درست كنيد و برابر صفر قرار دهيد هر ثانيه كه ميگذرد Timer1.Tick يك عدد به آن اضامه كند مثلاA+=1 وقتي ايتم a بزرگتر از 4 شد ايتم هم نام خود را ببندد

omidgold
یک شنبه 04 اردیبهشت 1390, 17:55 عصر
دوست عزيز هر گاه يك ايتم اضافه ميشود يك تايمر با همان نام درست شود و Interval آن را براي 4 ثانيه تنظيم كنيد بعد از 4 ثانيه خود تايمر خودش را Dispose مند
يا هر ايتم كه ايجاد شد يك integer با آن نام درست كنيد و برابر صفر قرار دهيد هر ثانيه كه ميگذرد Timer1.Tick يك عدد به آن اضامه كند مثلاA+=1 وقتي ايتم a بزرگتر از 4 شد ايتم هم نام خود را ببندد

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

omidgold
دوشنبه 05 اردیبهشت 1390, 17:04 عصر
سلام
خودم حلش کردم
این هم زکاتش:













Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click





Control.CheckForIllegalCrossThreadCalls = False





ListBox1.Items.Insert(ListBox1.Items.Count, "a")





Dim t As New System.Threading.Timer(AddressOf TimerProc)





t.Change(4000, 0)





End Sub





Private Sub TimerProc(ByVal state As Object)





Dim t As System.Threading.Timer = CType(state, System.Threading.Timer)





t.Dispose()





ListBox2.Items.Add(ListBox1.Items(0).ToString)





ListBox1.Items.RemoveAt(0)





End Sub