PDA

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



benyamin_pc
چهارشنبه 26 تیر 1387, 09:38 صبح
با سلام
چرا وقتی برنامه تو یه حلقه که مثلا" چند دقیقه کارش طول می کشد است اگر روی دکمه دیگری کلیک کنیم کار نمی کند؟

aliaaa
چهارشنبه 26 تیر 1387, 10:42 صبح
شما باید از تکنیک چند نخی (Multi-threading) استفاده کنید. باید یک Thread درست کنید و پردازش های سنگین را داخل آن راه بیاندازید.
به صورت پیشفرض برنامه شما تنها یک نخ داره. نخ ها به صورت موازی با هم کار می کنند. کار نکردن فرم شما وقتی که هنوز پردازشی انجام می شه هم به این دلیله که همه ی کاراتون رو نخ پیشفرض انجام می ده.

sinpin
چهارشنبه 26 تیر 1387, 10:50 صبح
تاپيك زير رو ببينيد : http://barnamenevis.org/forum/showthread.php?t=109257

benyamin_pc
چهارشنبه 26 تیر 1387, 11:29 صبح
میشه بگین الان به این کد چی اضافه کنم که گیر نکنه و در حین اجرای این حلقه دکمه های دیگه هم کار کنند؟

sinpin
چهارشنبه 26 تیر 1387, 12:10 عصر
اگر فقط ميخواهيد در زمان اجراي حلقه بتوانيد با ساير اجزاي فرم كار كنيد كد زير را درون حلقه اضافه كنيد :

Application.DoEvents();

benyamin_pc
چهارشنبه 26 تیر 1387, 14:12 عصر
از راهنماییتون ممنون بهتر شد تو اجرای دوباره حلقه به دکمه های دیگه توجه می کنه اما چون یکی از کارهایی هم که توی حلقه وجود دارد زمان بر است باز به اون که می رسه گیر می کنه
اون فیلم هایی هم که لینک دادین دانلود کردم اما انقدر صدای گوینده نا مفهوم بود و تند تند حرف می زد چیزی نفهمیدم آخه بعضی چیزاشم توضیح نداده بود و فقط می گفت این کد رو به این شکل می نویسیم

چیزی که از bgworker فهمیدم اینه که اون چیزی که زمان بر هست را توی یه تابع می نویسیم
سپس روی دکمه ای که می خواهیم کار تابع را آغار کند به جای اینکه تابع را صدا بزنیم bg را صدا می زنیم
اما از اینجا به بعدش مفهوم نبود
مثلا" اینکه تابع من void هست و آرگومانی نمی گیرد و bg که می خواهم صدا بزنم هم نمی خواهم آرگومان بگیرد اما بعد باید یه چیزی به resultesh بفرستم که نمیشه

benyamin_pc
چهارشنبه 26 تیر 1387, 15:18 عصر
اصلا" یه برنامه کوچولو نوشتم که اینجا بذارم ببینید چطوری میشه درستش کرد
فایل 1.rar کار می کنه اما طول می کشه و همه چیز از کار می افته
فایل 2.rar شبیه چیزی که تو فیلم و یه تایک دیگه دیده بودم در مورد bgworker تغییرش دادم و دیگه کار نمی کنه
حالا شما حداقل تغییرات را روی فایل 2 بدهید تا کار کنه

برای اجرا هم اول دکمه 2 را زده و از شاخه ویندوز فولدر Help را انتخاب کنید سپس دکمه 1 را بزنید

benyamin_pc
چهارشنبه 26 تیر 1387, 16:00 عصر
این یکی رو هم خواستم با thread درستش کنم اما بعد از انجام کار دکمه 2 وقتی دکمه 1 را می زنم از برنامه می پره بیرون

benyamin_pc
پنج شنبه 27 تیر 1387, 18:13 عصر
کسی فایل ها رو دید؟

Amir Oveisi
جمعه 28 تیر 1387, 01:21 صبح
من فایل اول رو درست کردم یه نگاه بنداز (با Multi Threading‌)

benyamin_pc
دوشنبه 31 تیر 1387, 05:19 صبح
فایل رو دیدم اما کار نمی کرد اما همون فایل 3 که گذاشته بودم درست بود ولی از تو خود دات نت می پرید بیرون که نمی دونم چرا اما بعد که فایل exasho باز می کنم همه چی درست کار می کنه
اما کار با bgworkero میشه یکی ساده توضیح بده؟

Amir Oveisi
دوشنبه 31 تیر 1387, 21:57 عصر
فایل رو دیدم اما کار نمی کرد
نگووووو
به جان خودم کار می کرد!!! (و می کنه)