PDA

View Full Version : مبتدی: به روزآوری لیبل در Thread



mhsaleh
چهارشنبه 08 تیر 1390, 23:32 عصر
من قصد دارم برنامه ای بنویسم که در Thread مقدار یک Label را تعیین نمایم.
برای این کار یک فرم دارم شامل یک کلید و یک لیبل. با فشردن کلید یک Thread اجرا می شود و من می خواهم بگویم که در داخل ترد مقدار لیبل به مقدار جدیدی تغییر نماید. چطور می توانم در ترد از لیبل خود استفاده نمایم در حالی که تابع Thread من از نوع static است؟

Legend M.A.R
چهارشنبه 22 تیر 1390, 23:23 عصر
یه مثال برات می زام
public class Alpha : System.Windows.Forms.Form
{
private System.Windows.Forms.Label Title = null;

public void SetString(string _Value)
{
Title.Text = _Value;
}

public Alpha()
{
Title = new System.Windows.Forms.Label();
Title.Parent = this;
}

public void runThread()
{
}
}

public class SimpleThread
{
private setString myDelegate;
private Alpha myParent;

private delegate void setString(string _Value);

public SimpleThread(Alpha _Parent)
{
myParent = _Parent;
if (myParent != null)
myDelegate = new setString(myParent.SetString);
System.Threading.Thread myThread = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadAction));
myThread.Start();
}


public void ThreadAction()
{
if (myParent != null)
if (myParent.Created)
myParent.Invoke(myDelegate, new object[] { "Hello Guy!!!" });
}
}

چون گفتی می خوای مقدار یک لیبل رو تغییر بدی و در کل هر چیزی که از Control ارث ببره حتما باید از تابع invoke استفاده کنی و گرنه خطا میده