更新文本框

时间:2013-03-09 15:44:53

标签: c# winforms timer backgroundworker

我正在编写一个程序来帮助游戏。我需要它来更新显示当前exp值的文本框,在论坛加载它确实显示exp,我需要它来更新exp,就像每个 3 seconds

我该怎么做呢?

这是我到目前为止所做的:

        Client C = Client.GetClients()[0];
        Player P;
        P = C.GetPlayer();
        expTextBox.Text = ("Experience: " + P.Experience.ToString());

我不确定我是否需要timer(我已经尝试过,而且我非常擅长制作)或backGroundWorker是最好的。

2 个答案:

答案 0 :(得分:2)

根据您的评论,我建议您在播放器攻击时更新UI,而不是使用计时器。这将使您的UI保持最新状态,并且可能比3秒或10秒计时器更好地为您服务。你会有这样的方法:

public void Attack(Enemy e)
{
  //do your attack code

  //did the enemy die?
  KillEnemy();

  //add exp just for landing a successful attack
  AddExp(e);
}

public void AddExp(Enemy e)
{
  CurrentPlayer.Exp += e.ExperienceGain;

  //update the UI with the new exp
  GameWindow.ExperienceBox.Text = CurrentPlayer.Exp;
}

这当然是更多的伪代码,因为我不知道你的设计是什么样的,但我做了很多游戏,这就是我一直这样做的。

祝你好运!

答案 1 :(得分:0)

我鼓励你使用Timer,如果你去无限循环的后台工作人员,那么当你使用后台工作人员时你需要处理两件事:

  1. 更新文本框或任何其他UI将无法正常工作,因为需要从主线程完成。所以你需要先检查myTextbox.requireInvoke()函数。
  2. 检查后台工作人员是否有取消信号以存在无限循环。
  3. 另一边是

    。使用计时器更新文本框时,您将花费一些时间。当计时器进入窗口中的事件处理循环然后激活事件,最后你将在计时器事件中编写代码。