PDA

View Full Version : هنگ کردن فرم در هنگام اجرای برنامه



sara_aryanfar
جمعه 02 اردیبهشت 1390, 02:19 صبح
با سلام من وقتی برنامه خودم رو اجرا می کنم موقعی که اطلاعات رو مثلا در لیست ویو اد می کنم کل فرم تا اون کار تموم بشه یخ می زنه و من نمی تونم با هیچ یک از اجزای فرم کار کنم علت این چی می تونه باشه؟

Babak-Magic
جمعه 02 اردیبهشت 1390, 02:37 صبح
وقتی حجم اطلاعات زیاد بشه این مشکل پیش میاد
شما یا از thread استفاده کن
یا از کنترل BackgroundWorker
موفق باشید

sara_aryanfar
جمعه 02 اردیبهشت 1390, 12:08 عصر
من از کنترل BackgroundWorker استفاده کردم اما وقتی به اد کردن داخل لیست ویو می رسه خطای استثنا میگیره البته من یه حلقه for دارم که مقادیری رو داخل یک رشته میریزه واین مقادیر رو توسط یه تابعی مرتب می کنم حالا من عمل ریختن این مقادیر رو داخل worker_DoWork انجام میدم اما مرتب سازی رو داخل اون متد که بیرون حالا همهکار ها درست انجام میشه اما با رسیدن به این خط برنامه خطا میگیره من حتی این خط رو هم گذاشتم ارر داد label1.Text = "" + cunt;

Babak-Magic
جمعه 02 اردیبهشت 1390, 13:00 عصر
این نمونه رو ببین
دانلود

sara_aryanfar
جمعه 02 اردیبهشت 1390, 15:50 عصر
با سلام دوست من برا من بازم خطا داد69039
تو اون خط وقتی یه مسیج شو میزارم درست نشون میده مقدار joda رو اما به محض اینکه میخوام اد کنم تو لیست این ارر رو میده

sara_aryanfar
جمعه 02 اردیبهشت 1390, 16:20 عصر
کار برد این خط کد چیه یه توضیح بهم میدین
Form1.CheckForIllegalCrossThreadCalls = false;

Babak-Magic
جمعه 02 اردیبهشت 1390, 21:57 عصر
همون خط کد رو اضافه کنی مشکلت حل میشه
البته این روش درست نیست فقط از سر باز کردنه!
شما بهتره از Delegate استفاده کنین
توی انجمن جستجو کنین به نتیجه های خوبی می رسید اگه مشکل داشتین بگید که همین نمونرو با Delegate درست کنم

Babak-Magic
جمعه 02 اردیبهشت 1390, 22:04 عصر
بیا گفتم شاید عجله داشته باشی واست نوشتم ببین
69062

pe32_64
پنج شنبه 13 خرداد 1395, 12:52 عصر
با سلام دوست من برا من بازم خطا داد69039
تو اون خط وقتی یه مسیج شو میزارم درست نشون میده مقدار joda رو اما به محض اینکه میخوام اد کنم تو لیست این ارر رو میده
تو ویندوز کلا نباید از یک ترد دیگه به کنترل های موجود در ترد اصلی برنامه دسترسی داشته باشید.

pe32_64
پنج شنبه 13 خرداد 1395, 13:02 عصر
همون خط کد رو اضافه کنی مشکلت حل میشه
البته این روش درست نیست فقط از سر باز کردنه!
شما بهتره از Delegate استفاده کنین
توی انجمن جستجو کنین به نتیجه های خوبی می رسید اگه مشکل داشتین بگید که همین نمونرو با Delegate درست کنم
درود
CheckForIllegalCrossThreadCalls رو استفاده نکنید.
این کار دردسر طلب کردن هستش!
برا اپدیت کنترل رو فرم باید این کد رو ترد قرار بدید :

control.Invoke((MethodInvoker)(()=> control.Text="new text"));

البته از NET 4.5 و C#‎‎‎‎‎‎ 5.0 به بعد باید از Task-based Asynchronous Pattern استفاده بشه.