PDA

View Full Version : سوال: تغییر مقدار textbox هنگام اجرای محاسبات



nima898
یک شنبه 04 بهمن 1388, 11:55 صبح
من یه برنامه محاسباتی سنگین نوشتم که با کامپیوتر من حدودا 7 دقیقه طول میکشه اجرا بشه میخوام حین اجرا پیغام هایی روی textbox یا هرجای دیگه ظاهر بشه
برنامه ای که نوشتم تو مدت اجرا هیچ خروجی نمایش نمیده
(فقط از proressbar برای نمایش روند محاسبه تونستم خروجی داشته باشم که اگه موس تکون بخوره تا آخر محاسبه اونم هنگ میکنه)
لطفا کمکم کنید

arsalansalar
یک شنبه 04 بهمن 1388, 12:19 عصر
به جاي اين كار اول بيا كداتو درست كن.از نظر منطقي هيچ توجيهي نداره 7 دقيقه يك محاسبه طول بكشه.

ACorvinus
یک شنبه 04 بهمن 1388, 12:31 عصر
سلام .


برای محاسبات سنگین میتونین از Background Worker Class استفاده کنین.
(به روایت از یکی از دوستانم؛ Nan Shekari)


http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

Computer.Programmer
یک شنبه 04 بهمن 1388, 18:26 عصر
شما اگر با بحث Multithread ها آشنایی داری می تونی از اونها کمک بگیری و یا اگر نمی خوای خودتو در گیر این جور بحث ها بکنی بهتر که از Application.DoEvent استفاده کنی.

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


موفق باشی

Alirezanet
یک شنبه 04 بهمن 1388, 18:32 عصر
کدتون که باعث میشه 7 دقیقه طول بکشه رو بزارید ...
مثلا یه حلقست؟ for..next یا یه چیز دیگه ؟!
حلقه باشه بهترین راه به قول آقای Computer.Programmer (http://barnamenevis.org/forum/member.php?u=123760) همون application.Doevent هستش
اگه از حلقه استفاده کنین که سادست ولی چیز دیگه ای باشه ..... باید ببینم!

ACorvinus
یک شنبه 04 بهمن 1388, 20:24 عصر
سلام دوباره .

با تمام احترامی که به آقایون Computer.Programmer و Alirezanet دارم میخواستم بگم در کامپیوتر خودتون فاکتوریل 85 رو محاسبه کنین (که یکی از ساده ترین بحث ها هستش).

اونوقت شاید به طول انجامیدن (به دقیقه) یه محاسبه براتون محسوس باشه.
و برای جلوگیری از Not Responding شدن برنامه میتونین به http://msdn.microsoft.com مراجعه کرده و راه حل مشکل رو جویا بشین، که بنده برای حل این مشکل یه لینک سریع هم براتون معرفی می کنم:


http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx


موفق باشین.

Alghoochi
یک شنبه 04 بهمن 1388, 20:35 عصر
الگوریتمی که نوشتی اصلاح کن تا یه کم زمان محاسبه کمتر بشه و از Backgroundworker که دوستان گفتن استفاده کن

غلامرضا شریفی
یک شنبه 04 بهمن 1388, 20:51 عصر
اين لينكهاي دوستان معرفي كردن نگاه كردم كسي هست به روش ساده بايد بگويد چطور از Backgroundworker بايد استفاده كرد

arsalansalar
دوشنبه 05 بهمن 1388, 08:17 صبح
فكر كنم تو تايپيك هاي مفيد چند تا مثال از background worker باشه

nima898
دوشنبه 05 بهمن 1388, 09:05 صبح
برنامه رو خیلی بهینه کردم برنامه ضرب اعداد خیلی بزرگ صحیح که حاصل رو بصورت کامل (بدون ممیز شناور) نمایش بده
ضمنا یک باگ از vb2005 پیدا کردم :


Dim h2 As Int64 = Val("100009") + 10000000000000000

حاصل این عبارت رو vb.net عدد 10000000000100008 محاسبه میکنه!!

ACorvinus
دوشنبه 05 بهمن 1388, 09:13 صبح
برنامه رو خیلی بهینه کردم برنامه ضرب اعداد خیلی بزرگ صحیح که حاصل رو بصورت کامل (بدون ممیز شناور) نمایش بده
ضمنا یک باگ از vb2005 پیدا کردم :


Dim h2 As Int64 = Val("100009") + 10000000000000000

حاصل این عبارت رو vb.net عدد 10000000000100008 محاسبه میکنه!!



سلام .

برادر این باگ نیست!!!
شما در محاسباتتون مشکل دارین. مثلا برای تبدیل رشته عددی به عدد نباید از تابع Val استفاده کنین.

شما دستور فوق رو به صورت زیر تصحیح کنین:


Dim h2 As Int64 = Int64.Parse("100009") + 10000000000000000


موفق باشین.

ACorvinus
دوشنبه 05 بهمن 1388, 09:21 صبح
سلام دوباره.

فراموش کردم اینو بگم، خروجی تابع Val نوع داده ای Double (اعشاری) هستش!!

برای مثال:



Dim Ex1 As Double = Val("103") '103.0
Dim Ex2 As Double = Val("12JK4") '12.0
Dim Ex3 As Double = Val("JH190") '0.0



بازم مشکلی بود ...