螺纹评分系统

时间:2012-04-24 19:57:32

标签: c# multithreading windows-phone-7

我开始学习线程并遇到问题。

我有一个评分系统,旨在为临时的addedPoints变量添加一个点,以向玩家显示他们最近获得的积分数。然后在大约1秒钟之后,应该将增加的分数添加到球员得分中。

我的尝试看起来像这样:

public static void AddPoints(int points)
{
    for (int i = 0; i < points; i++)
    {
        Thread addThread = new Thread(new ThreadStart(ThreadedPoint));
    }
}

private static void ThreadedPoint()
{
    addedPoints += 1;
    Thread.Sleep(1000);
    score += 1;
    addedPoints -= 1;
}

这有两个问题。首先它只允许我为每个线程添加1点,这远非理想。其次,它实际上并不起作用。添加的积分和分数都没有更新。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:8)

你还没有真正开始你的线程,所以什么都不会发生:

public static void AddPoints(int points)
{
    for (int i = 0; i < points; i++)
    {
        Thread addThread = new Thread(new ThreadStart(ThreadedPoint));
        addThread.Start();
    }
}

在一次添加多个点而不是一次添加多个点时,您可以改为使用ParameterizedThreadStart

public static void AddPoints(int points)
{
   Thread addThread = new Thread(new ParameterizedThreadStart(ThreadedPoint));
   addThread.Start(points); //You may need a cast of points to Object here
}

private static void ThreadedPoint(Object data)
{
    int points = (int)data;
    addedPoints += points;
    Thread.Sleep(1000);
    score += points;
    addedPoints -= points;
}

答案 1 :(得分:2)

除非您想学习线程,否则最好重新设计您的商店“最近赚取”的方式,使其不需要延迟更新。

即。立即更新分数并有单独的文件,说明何时获得最新分数,因此您可以随时获得分数并使用一些代码找出“最近获得”的信息。如果需要,您可以通过“最近获得”来调整分数的显示值。

答案 2 :(得分:0)

如果你想慢慢消耗这些点,将点传递给线程(参见How can I pass a parameter to a Java Thread?)并使用while循环消耗所有点(假设你将传递的参数存储为点)。

while(points > 0) {
  points -=1;
  addedPoints += 1;
  Thread.Sleep(1000);
  score += 1;
  addedPoints -= 1;
}