PDA

View Full Version : سوال: گرفتن مقدار عبارت درون تکست باکس در thread



shytonak
دوشنبه 16 اسفند 1389, 02:51 صبح
دوستان میشه راهنمایی کنید که چطور مقدار عبارتی که درون یک تکست باکس هست رو موقع اجرای thread بگیرم.
با تشکر

محسن شامحمدی
دوشنبه 16 اسفند 1389, 09:36 صبح
دوستان میشه راهنمایی کنید که چطور مقدار عبارتی که درون یک تکست باکس هست رو موقع اجرای thread بگیرم.
کلا از صفر بلد نیستین یا با قسمت خاصیش مشکل دارین؟
اگر از صفر بلد نیستین می تونید به این تاپیک برید.
آموزش جامع Threading و مباحث مریوطه مثل همزمان سازی (http://goo.gl/Axu1j)

اگر هم با تکه خاصیش مشکل دارین بگید تا راهنمایی کنم.

shytonak
دوشنبه 16 اسفند 1389, 13:16 عصر
ممنون تا حدی آشنایی دارم اما نه زیاد من تونامه ام یه تریت نوشتم اما نمی تونم با کنترل های موجود در فرم برنامه مثل تکست باکس ارتباط بر قرار کنم.ممنون می شم بگید چطور باید اینکارو انجام بدم.

mehranmsba
دوشنبه 16 اسفند 1389, 22:27 عصر
معمولا برای عناصر مشترک بین Thread ها از وکالت استفاده می کنند یعنی Delegate .
شما باید در ابتدا ببینید عنصرتان در حال استفاده هست یا نه برای همین از InvokeRequired استفاده می کنیم که تمام عناصر روی فرمی آن را دارند. حال بعد از آن ما خود شی رو Invoke می کنیم.
قالب)

public delegate void mydel(string text);

if (txtBox1.InvokeRequired)
{
txtBox1.Invoke(new mydel(SetRefreshData),(object)"Salam Msba");
}



//-----------------------------

public void SetRefreshData(string text)
{
//کارهای شما
//مثلا مقدار یک تکست باکس رو تغییر دهید
}


این هم یک مثال :


public Thread p1;
private void button1_Click(object sender, EventArgs e)
{
p1 = new Thread(new ThreadStart(Run));
p1.Start();
}
public delegate void mydel(string text);
public void Run() {

if (textBox1.InvokeRequired)
textBox1.Invoke(new mydel(setdata), (object)"Salam");
else
setdata("Salam");


}
public void setdata(string text) {

textBox1.Text = text;


}


با اجرا شدن Thread ما بررسی می کنیم که آبا شی درگیر است یا نه. اگر نبود که ما یک متد اجرا می کنیم که رشته مورد نظر را ثبت کند.
اما اگر درگیر بود ما شی را قرض می کنیم و به یک وکیل می دهیم. این وکیل متد ما را اجرا کرده و رشته مورد نظر را که تبدیل به یک object شده را به متد می فرستد.


برای خواندن یک TextBox هم روش کاملا مشابه است یعنی:

public Thread p1;
private void button1_Click(object sender, EventArgs e)
{
p1 = new Thread(new ThreadStart(Run));
p1.Start();
}
public delegate void mydel(TextBox c);
public string data;
public void Run() {

if (textBox1.InvokeRequired)
textBox1.Invoke(new mydel(setdata), (object)textBox1);
else
setdata(textBox1);


}
public void setdata(TextBox c) {

data = c.Text;

}


حال در data اطلاعات تکست باکس قرار دارد که می توانید در جاهای مختلف از آن استفاده کنید.

موفق باشید.