مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

arash_saba

عضویت از 1394/06/16

مشکل در اجرای چند نخی

  • یکشنبه 2 خرداد 1395
  • 18:55
تشکر میکنم

با سلام بنده برنامه ای مبنی بر فرم لطفا چند لحظه صبر کنید پیدا کردم که با مثال خودش جواب میده چون در اون هیچ دسترسی به منابع خارج نداره و فقط یه sleep ساده است 

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


            dataGridView_Result.Columns.Add("shrh", "عنوان");

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

 

خطا : 

"Cross-thread operation not valid: Control 'dataGridView_Result' accessed from a thread other than the thread it was created on."

 

پاسخ های این پرسش

تعداد پاسخ ها : 5 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • دوشنبه 3 خرداد 1395
  • 08:57

معمولا کامپوننت ها برای استفاده شدن در Thread متدی دارند با عنوان Invoke باید از اون استفاده کنید

اگر از Windows Form استفاده میکنید پیشنهاد میکنم از BackgroundWorker استفاده کنید

کاربر سایت

arash_saba

عضویت از 1394/06/16

  • دوشنبه 3 خرداد 1395
  • 09:53

سلام و خسته نباشید
مورد استفاده بنده به این صورت است که اطلاعات زیادی وارد گرید ویو میشه و همین موضوع باعث میشه فرم برای یک لحظه کوتاه بالا بیاد و رنگ فرم دیده بشه بعد هنگ مینه تا زمانی که گارش تموم بشه

حالا میخاستم با این کار ابتدا فرمی به عنوان لطفا صبر کنید دیده بشه و بعد از اتمام فرم اصلی دیدهخ بشه

طبق نمومنه شما استاد گرامی در سایت برنامه نویس که پروژه ای گذاشته بودید انجام دادم ولی زمانی که به خط کد بالا میرسید خطای مورد نظر میده
 

در مورد invok هم جستجو کردم ولی کمی مطالبش سنگین بود برای همین در خواست راهنمایی دارم

 

با تشکر

موفق باشید

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • دوشنبه 3 خرداد 1395
  • 13:28

نمونه زیر رو ببینید

ProgressBar در BackgroundWorker

کاربر سایت

arash_saba

عضویت از 1394/06/16

  • دوشنبه 3 خرداد 1395
  • 14:17

سلام استاد با تشکر از راهنمایی شما

 

سوال دیگه داشتم

اگه از بک گروند استفاده کنم دیگه نمیشه تا قبل از اینکه گرید پربشه فرم hide باشه و فرم لطفا صبر کنید یا همون splash تو devexpress نمایش داده بشه و وقتی پروسه لود فرم تموم شد فرم show و فرم لطفا صبر کنید تموم بشه

 

لطفا راهنمایی کنید

 

با تشکر از صبر و تحمل شما در مقابل ما اماتورها

 

 

کاربر سایت

morteza.cs

عضویت از 1393/08/12

  • دوشنبه 3 خرداد 1395
  • 14:42

سلام

با اجازه آقای مدائنی

توی Thread شما نمی تونی به کنترل های Thread دیگه بطور مستقیم دسترسی داشته باشی. برای دسترسی باید به این شکل عمل کنی : 

 

if (Grid1.InvokeRequired)
	Grid1.Invoke((MethodInvoker) delegate { Methode1(); });
else
	Methode1();

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

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

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

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)