PDA

View Full Version : مفهوم متن خطا در تردینگ چیست



ordebehesht
چهارشنبه 27 دی 1391, 02:14 صبح
سلام من یه لیبل و باتن دارم که تو چند نخی دارم کار میکنم این هنگام اجرا این خطارو میده
Cross-thread operation not valid: Control 'label1' accessed from a thread other than the thread it was created on.

یعنی چی:؟

ordebehesht
چهارشنبه 27 دی 1391, 02:51 صبح
lable.CheckForIllegalCrossThreadCalls = false;

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

tooraj_azizi_1035
چهارشنبه 27 دی 1391, 09:05 صبح
Cross-thread operation یعنی عملی که بین دو نخ انجام می شود.
کنترل label1 از نخی مورد دستیابی قرار گرفته که Handle کنترل رو ایجاد نکرده است و این عملی نامعتبر است.

ordebehesht
چهارشنبه 27 دی 1391, 11:19 صبح
Cross-thread operation یعنی عملی که بین دو نخ انجام می شود.
کنترل label1 از نخی مورد دستیابی قرار گرفته که Handle کنترل رو ایجاد نکرده است و این عملی نامعتبر است.
پس اونوقت تکه کدی و که گذاشتم برا چیه یعنی کارش چیه

RED-C0DE
چهارشنبه 27 دی 1391, 11:46 صبح
سلام من یه لیبل و باتن دارم که تو چند نخی دارم کار میکنم این هنگام اجرا این خطارو میده
Cross-thread operation not valid: Control 'label1' accessed from a thread other than the thread it was created on.

یعنی چی:؟


وقتی کنترلی روی یک ترد (در اینجا ترد اصلی یا همون UI ) ساخته بشه ، برای دستیابی ب اون و کار با اون (مثلا تغییر پراپرتی هاش) نیازه ک از داخل همون ترد بهش دسترسی پیدا کنیم. در برنامه های multiThreading باید این قضیه رو حل کنیم وگرنه اگر از یک ترد جداگانه ک خودمون درست کردیم بیایم و تغییری در مشخصات کنترل بدیم با استثنا CrossThreading روبرو می شیم. برای حل این قضیه باید با بررسی InvokeReuqired (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.invokerequired.aspx) وی کنترل و Invoke کردن ب کنترلمون در ترد خودش برسیم..
راه ساده تر برای مسائل روزمره در باب multiThreading ک با UI کار می شه استفاده از کامپوننت BackgroundWorker هست ک خودش این قضایا رو هندل می کنه با رویدادهای مفیدی ک داره کار رو ساده می کنه و نیازی ب کارای اضافه نیست (البته مسلما دونستن این قضایا بسیار هم خوبه ک تا حدی بدونیم پشت صحنه چ اتفاقاتی می افته)

tooraj_azizi_1035
چهارشنبه 27 دی 1391, 11:51 صبح
باعث میشه زمان دیباگ برنامه از Cross-thread ایراد نگیره.

ordebehesht
چهارشنبه 27 دی 1391, 12:14 عصر
وقتی کنترلی روی یک ترد (در اینجا ترد اصلی یا همون UI ) ساخته بشه ، برای دستیابی ب اون و کار با اون (مثلا تغییر پراپرتی هاش) نیازه ک از داخل همون ترد بهش دسترسی پیدا کنیم. در برنامه های multiThreading باید این قضیه رو حل کنیم وگرنه اگر از یک ترد جداگانه ک خودمون درست کردیم بیایم و تغییری در مشخصات کنترل بدیم با استثنا CrossThreading روبرو می شیم. برای حل این قضیه باید با بررسی InvokeReuqired (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.invokerequired.aspx) وی کنترل و Invoke کردن ب کنترلمون در ترد خودش برسیم..
راه ساده تر برای مسائل روزمره در باب multiThreading ک با UI کار می شه استفاده از کامپوننت BackgroundWorker هست ک خودش این قضایا رو هندل می کنه با رویدادهای مفیدی ک داره کار رو ساده می کنه و نیازی ب کارای اضافه نیست (البته مسلما دونستن این قضایا بسیار هم خوبه ک تا حدی بدونیم پشت صحنه چ اتفاقاتی می افته)

آموزش تصویری دارین