我以前做了一個簡單的球和槳程序全部運行在一種形式。現在我試圖讓球在單獨的線程上運行,但是在概念上不太理解如何讓球運行單獨的線程,同時保持程序的其餘部分相同。同步對象傳遞給線程與計時器
本來計時器會讓球移動,所以我想我可以插入移動線到我的ballUpdate類。但現在我的問題是,如果有一種方法可以使我的當前計時器實現線程工作。
這是我的Form1中是什麼樣子
public partial class Form1 : Form
{
Graphics paper;
Paddle paddle = new Paddle();
Ball ball = new Ball();
Thread myThread;
BallUpdate ballUpdate = new BallUpdate();
public Form1()
{
InitializeComponent();
myThread = new Thread(() => ballUpdate.ballMotion(ball));
myThread.Start();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
paper = e.Graphics;
paddle.drawPaddle(paper);
ball.drawBall(paper);
}
private void timer1_Tick(object sender, EventArgs e)
{
//ball.moveBall();
ball.collide();
ball.hitPaddle(paddle.PaddleRec);
this.Invalidate();
}
我想這可能會得到一些事情,但球並沒有移動。
class BallUpdate
{
public BallUpdate(){}
public void ballMotion(Ball x)
{
while(true)
{
x.moveBall();
Thread.Sleep(30);
}
}
}
您需要一個循環來保持線程運行。 – Romoku 2013-03-22 23:59:58
...和Thread.Sleep以毫秒爲單位接受整數時間間隔(1/10 == 0) – 2013-03-23 00:01:49
@Romoku好的我剛剛爲x.moveball添加了一個循環,並將Thread.Sleep更改爲1.球仍然沒有移動。 – krikara 2013-03-23 00:07:09