برگزیده های پرشین تولز

ارتباط با کنترلهای فرم در thread

nabegheh95

کاربر تازه وارد
تاریخ عضویت
26 فوریه 2007
نوشته‌ها
61
لایک‌ها
0
سلام.
یک thread ایجاد کرده ام که به درستی کار می کند. اما لازم است که این ترد مقادیر بعضی از کنترلهای text فرم را تغییر دهد.
اما کنترلهای فرم در تابع thread قابل دسترسی نیستند!

کد:
public static void ThreadFunc(object index)
{
 ...
}
 

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

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

nsh

Registered User
تاریخ عضویت
19 ژانویه 2006
نوشته‌ها
685
لایک‌ها
4
محل سکونت
i & j : 2 & 3
دقیقا نمیدونم چی بگم. اما معمولا فرم در ترد جدایی اجرا میشه و به همین خاطر هم اجازه دسترسی های بین تردی داده نمیشه. فکر نکنم بشه. با این همه دقیق نمیدونم
 

alishokr

کاربر تازه وارد
تاریخ عضویت
30 مارس 2010
نوشته‌ها
5
لایک‌ها
0
سلام...
دات نت طوری طراحی شده که اجازه ی دسترسی به اعضای مرتبط با سایر Thread ها از طریق یه Thread دیگه رو نمیده ...
اما شما دو راه پیش رو داری:
1. از BackgroundWorker استفاده کنی.
2. از پراپرتی InvokeRequired استفاده کنی ...
به شرح زیر:
ابتدا یه Delegate تعریف میکنیم که به یه تابع با signature یی مشابه زیر اشاره کنه:
کد:
delegate void ButtonTextChanger(string tx);


public void ButtonTextChange(string tx)
{
	if (this.button1.InvokeRequired)
	{
	   ButtonTextChanger bt = ButtonTextChange;
	   this.button1.Invoke(bt, new object[] {"Hello"};
	}
	else
	{
	   button1.Text = tx;
	}
}

حالا داخل ایونت Click دکمه ای که روی فرم گذاشتیم ، جهت ایجاد یه Thread جدید کد زیر رو میگذاریم:
کد:
private void button1_Click(object sender, EventArgs e)
{
    ButtonTextChanger t = ButtonTextChange;
    t.BeginInvoke("a", null, null);
}

این کد این امکان رو میده تا بتونی به کنترهای فرم دسترسی داشته باشی...

موفق باشی...
 
بالا