به کد زیر دقت کنید:
private void Form1_Load(object sender, EventArgs e)
{
t = new Thread(new ThreadStart(main));
t.Start();
Thread.Sleep(1000);
t = new Thread(new ThreadStart(main));
t.Start();
}
public void main()
{
int x, y, a, b;
double selectY;
Random rnd = new Random();
x = rnd.Next(0, lblEnvironment.Width - 20);
Thread.Sleep(100);
y = rnd.Next(0, lblEnvironment.Height - 20);
if ((x > -20) && (x < lblEnvironment.Width))
{
Thread.Sleep(100);
selectY = rnd.NextDouble();
if (selectY < 0.5)
y = -20;
else
y = lblEnvironment.Height;
}
a = rnd.Next(-5, 5);
Thread.Sleep(100);
b = rnd.Next(-5, 5);
while (a == 0) a = rnd.Next(-5, 5);
while (b == 0) b = rnd.Next(-5, 5);
Pen pen = new Pen(Color.Red, 10);
Graphics g = lblEnvironment.CreateGraphics();
while (true)
{
if (cancelThread)
{
cancelThread = false;
t.Abort();
}
g.DrawEllipse(pen, x, y, 20, 20);
Thread.Sleep(100);
g.Clear(Color.White);
if (((x < 0) && (a < 0)) || ((x == lblEnvironment.Width) && (a > 0)))
a *= -1;
x += a;
if (((y < 0) && (b < 0)) || ((y == lblEnvironment.Height) && (b > 0)))
b *= -1;
y += b;
if ((x > lblEnvironment.Width - 25) || (x < 5))
{
t = new Thread(new ThreadStart(main));
t.Start();
Thread.CurrentThread.Abort();
}
if ((y > lblEnvironment.Height - 25 && b > 0) || (y < 5 && b < 0))
{
b *= -1;
}
}
}
قضیه از این قراره که من میخوام دو عدد گوی در ابتدای برنامه در قالب Thread بوجود بیان و هر کدوم جداگانه واسه خودشون شروع به حرکت به جهت های مختلف کنن و هر وقت که هر یک از گوی ها به دیواره سمت چپ یا راست برخورد میکنه باید از بین بره و یک گوی دیگه در قالب یک Thread جدید ایحاد بشه و این روال تا آخر ادامه داشته باشه. همه چیز الآن درست هست و تنها یک مشکل مونده و اون هم اینه که انگاری هر دو گوی از یک منبع استفاده می کنن و انگاری که منابع بین دو گوی تقسیم میشه و گوی ها بصورت چشمک زن در میان. برای حل این مشکل باید چیکار کنم؟
خواهشن کمک کنید.
مرسی.