IMANAZADI
جمعه 28 مهر 1391, 21:00 عصر
برنامه زیر را در نظر بگیرید
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1 ()
{
InitializeComponent();
}
Thread t1;
Thread t2;
public delegate void dele (int a);
dele nem;
private void button1_Click (object sender , EventArgs e)
{
t1 = new Thread(new ThreadStart(dis));
nem = new dele(chg);
t1.IsBackground = true;
t1.Start();
}
private void dis ()
{
for (int i = 0 ; i < 1000000 ; i++)
{
this.Invoke(nem , i);
}
}
private void chg (int b)
{
listBox1.Items.Add(b);
}
private void button2_Click (object sender , EventArgs e)
{
t2 = new Thread(new ThreadStart(dis2));
nem = new dele(chg2);
t2.IsBackground = true;
t2.Start();
}
private void dis2 ()
{
for (int j = 1000000 ; j < 2000000 ; j++)
{
this.Invoke(nem , j);
}
}
private void chg2 (int b)
{
listBox2.Items.Add(b);
}
private void button3_Click (object sender , EventArgs e)
{
t1.Abort();
}
private void button4_Click (object sender , EventArgs e)
{
t2.Abort();
}
}
}
چرا پس از اجرای برنامه و زدن کلید 1 برنامه بدون هنگ کار میکنه ولی به محض اینکه کلید دوم که باعث شروع ترد دوم میشه برنامه هنگ میکنه
کار این متد چیه ؟؟
t1.IsBackground = true;
آیا ارسال دو متد یا متغییر که در همین مثال هست به یک delegate صحیح هست
ارسال متد chg و متد chg2 به دیلیگیت dele
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1 ()
{
InitializeComponent();
}
Thread t1;
Thread t2;
public delegate void dele (int a);
dele nem;
private void button1_Click (object sender , EventArgs e)
{
t1 = new Thread(new ThreadStart(dis));
nem = new dele(chg);
t1.IsBackground = true;
t1.Start();
}
private void dis ()
{
for (int i = 0 ; i < 1000000 ; i++)
{
this.Invoke(nem , i);
}
}
private void chg (int b)
{
listBox1.Items.Add(b);
}
private void button2_Click (object sender , EventArgs e)
{
t2 = new Thread(new ThreadStart(dis2));
nem = new dele(chg2);
t2.IsBackground = true;
t2.Start();
}
private void dis2 ()
{
for (int j = 1000000 ; j < 2000000 ; j++)
{
this.Invoke(nem , j);
}
}
private void chg2 (int b)
{
listBox2.Items.Add(b);
}
private void button3_Click (object sender , EventArgs e)
{
t1.Abort();
}
private void button4_Click (object sender , EventArgs e)
{
t2.Abort();
}
}
}
چرا پس از اجرای برنامه و زدن کلید 1 برنامه بدون هنگ کار میکنه ولی به محض اینکه کلید دوم که باعث شروع ترد دوم میشه برنامه هنگ میکنه
کار این متد چیه ؟؟
t1.IsBackground = true;
آیا ارسال دو متد یا متغییر که در همین مثال هست به یک delegate صحیح هست
ارسال متد chg و متد chg2 به دیلیگیت dele