PDA

View Full Version : مبتدی: شروع با thread



fortex
دوشنبه 02 اردیبهشت 1392, 09:27 صبح
سلام دوستان من تازه کار با thread را شروع کردم و برای اینکه یاد بگیرم میخواستم این کد را برام توضیح بدبد:


namespace WindowsFormsApplication15
{
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}
#region "Timer1 Thread"
private delegate void _timer1Delegate(string phrase);
private delegate void _timer1DoneDelegate();

//*/////////////////////////////////////////////////////////////

private void t1()
{
try
{

int i = 1;
Invoke(new _timer1Delegate(timer1Action), new object[] { i.ToString() });
System.Threading.Thread.Sleep(5000); //waits 1 second

Invoke(new _timer1DoneDelegate(timer1ActionDone));
}
catch (System.Exception ex) { }
}
//*///////////////////////////////////////////////////////////////////////
private void timer1Action(string phrase)
{
this.label1.Text = null;
this.label1.Text = phrase;
}
//*///////////////////////////////////////////////////////////////////////
private void timer1ActionDone()
{
this.label1.Text += "- Done";
System.Threading.Thread t = new System.Threading.Thread(t2);
t.IsBackground = true;
t.Start();
}
//*///////////////////////////////////////////////////////////////////////
#endregion
#region "Timer2 Thread"
private delegate void _timer2Delegate(string phrase);
private delegate void _timer2DoneDelegate();
//*///////////////////////////////////////////////////////////////////////
private void t2()
{
try
{
for (int i = 0; i < 21; i++)
{
Invoke(new _timer2Delegate(timer2Action), new object[] { i.ToString() });
System.Threading.Thread.Sleep(1000); //waits 1 second
}
Invoke(new _timer2DoneDelegate(timer2ActionDone));
}
catch (System.Exception ex) { }
}
//*///////////////////////////////////////////////////////////////////////
private void timer2Action(string phrase)
{
this.label2.Text = null;
this.label2.Text = phrase;
}
//*///////////////////////////////////////////////////////////////////////
private void timer2ActionDone()
{
this.label2.Text += "-Done";
MessageBox.Show("All tasks are done");
}
//*///////////////////////////////////////////////////////////////////////
#endregion
private void Form1_Load(object sender, EventArgs e)
{
this.timer1.Enabled = true;
}



private void timer1_Tick_1(object sender, EventArgs e)
{
System.Threading.Thread t = new System.Threading.Thread(t1);
t.IsBackground = true;
timer1.Enabled = false;
t.Start();
}

}
}

یه توضیح کلی
و
اینکه invoke چیه
و
delegate چیه
و
IsBackground چیه
و
یه توضیح در مورد این سه خط :

#region "Timer1 Thread"
private delegate void _timer1Delegate(string phrase);
private delegate void _timer1DoneDelegate();

و اینکه اگه من بخوام توی این ترد کدنویسی کنم کدم را کجاش اید وارد کنم؟
مثلا کد زیر کجای thread باید وارد کنم که بعد از پنج ثانیه اجرا بشه و تموم بشه براه سراغ ترد بعدی؟

this.Cursor = new Cursor(Cursor.Current.Handle);

Cursor.Position = new Point((xi - 10), (yi - 20));
uint X = (uint)Cursor.Position.X;
uint Y = (uint)Cursor.Position.Y;
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);

ممنون

amirzandi
دوشنبه 02 اردیبهشت 1392, 10:50 صبح
Invoke زمانی استفاده می شه که شما بخوای یک کنترل در فرم را تغییر بدی زمانی که Thread به جز Main Thread در حال اجرا هست. از طریق Invoke میای Action را که از نوع Delegate هست Call می کنی و اون Delegate که call کردی ، تغییر مورد نظر را در کنترل انجام می ده.

esafb52
دوشنبه 02 اردیبهشت 1392, 13:15 عصر
سلام, دوست عزیز اگه اینا رو هم توضیح بدن باز ممکنه بگین متد چیه و ....
شما باید بعضی از مفاهیم رو مطالعه کنی بعد اگه مشکلی بود بپرسین تو قسمت تالاریکی از مدیران gwbasic هست که اگه پست هاشو رو پیگیری کن یه پست داره آموزش C# چیزای جالبی داره خصوصا Delegate
موفق باشی