PDA

View Full Version : ارتباط با کنترلهای فرم در thread



nabegheh95
دوشنبه 21 دی 1388, 10:10 صبح
سلام.
یک thread ایجاد کرده ام که به درستی کار می کند. اما لازم است که این ترد مقادیر بعضی از کنترلهای text فرم را تغییر دهد.
اما کنترلهای فرم در تابع thread قابل دسترسی نیستند!



public static void ThreadFunc(object index)
{
...
}


// in main
tThread = new Thread(ThreadFunc);
tThread.Start(iIndex);


من چطور با فرم ارتباط برقرار کنم؟

AliRezaPro
دوشنبه 21 دی 1388, 11:26 صبح
برای استفاده از کلمه ی static دلیلی داشتید؟
اونو حذف کنید
متدهای استاتیک فقط میتونند به اعضای Static دسترسی داشته باشند.خوب دلیلشم ساده هست چون به شئ خاصی وابسته نیستد

nabegheh95
دوشنبه 21 دی 1388, 12:46 عصر
کد رو تغییر دادم به شکل زیر:



public void ThreadFunc(object index)
{
...
}

// در کد کلیک یک button
Form1 frm = this;
tThread = new Thread(frm.ThreadFunc); // یا : tThread = new Thread(ThreadFunc);
tThread.Start(iIndex);


حالا برنامه اجرا می شه ولی داخل thread هنگام کار کردن با اولین کنترل فرم خطای exeption زیر رخ می دهد:


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

FastCode
دوشنبه 21 دی 1388, 13:06 عصر
System.Windows.Forms.Control.CheckForIllegalCrossT hreadCalls =false;

nabegheh95
دوشنبه 21 دی 1388, 13:50 عصر
مرسی FastCode عزیز مشکلم حل شد.
من این کد رو قبل از ایجاد thread نوشتم و بعد هنگام بستن فرم ، در تابع FormClose ، آن را true کردم و مشکلم حل شد.
متشکرم.

Saeed.Masoumi
دوشنبه 21 دی 1388, 23:02 عصر
سلام
دوست عزیز راجع به بن بست چیزی می دونید؟
اون کد رو مطلقا استفاده نکنید.چون ممکن است عواقب وخیمی داشته باشد.
اینجا رو ببین حتما (http://www.barnamenevis.org/forum/showpost.php?p=369771&postcount=11)
و برای حل مشکل شما :
حتما اینجا رو ببینید (http://msdn.microsoft.com/en-us/library/ms171728.aspx)
موفق باشید

FastCode
دوشنبه 21 دی 1388, 23:35 عصر
سلام
دوست عزیز راجع به بن بست چیزی می دونید؟
اون کد رو مطلقا استفاده نکنید.چون ممکن است عواقب وخیمی داشته باشد.
اینجا رو ببین حتما (http://www.barnamenevis.org/forum/showpost.php?p=369771&postcount=11)
و برای حل مشکل شما :
حتما اینجا رو ببینید (http://msdn.microsoft.com/en-us/library/ms171728.aspx)
موفق باشید
:متعجب::متعجب::خجالت::خجالت:
کاملا" درسته ولی من تا حالا فقط یک بار به این مشکل برخورد کردم.
و اصلا" فکر نمیکردم که ممکنه علتش این باشه.
ممنون.

Sajjad.Aghapour
دوشنبه 21 دی 1388, 23:41 عصر
در مورد cross-thread قبلا زیاد بحث شده....

Asynchronous راه چاره است.میتونید به وسیله BackgroundWorker و یا با بهره گیری از delegate و اجرای نخ به صورت async این کار رو بدون مشکل انجام بدید....

لطفا جستجو کنید

...
موفق باشید/
...