按下键冻结定时器c#

按下键冻结定时器c#,c#,timer,C#,Timer,嘿,我正在制作一个蛙人类型的游戏,我正在使用计时器使图像在屏幕上移动。我还使用keydown事件来处理用户移动“青蛙”时的情况。所以,w向上移动,s向下移动,等等 我遇到的问题是,每当用户按下任何移动按钮时,计时器都会冻结。这意味着,如果用户只需按住“w”键或向上键,所有车辆将停止移动 有没有一种方法可以将计时器放在后台工作程序中,或者有没有一种方法可以让计时器即使在用户移动时也能继续滴答作响 谢谢你的帮助 这就是我目前拥有的: public string i; private

嘿,我正在制作一个蛙人类型的游戏,我正在使用计时器使图像在屏幕上移动。我还使用keydown事件来处理用户移动“青蛙”时的情况。所以,w向上移动,s向下移动,等等

我遇到的问题是,每当用户按下任何移动按钮时,计时器都会冻结。这意味着,如果用户只需按住“w”键或向上键,所有车辆将停止移动

有没有一种方法可以将计时器放在后台工作程序中,或者有没有一种方法可以让计时器即使在用户移动时也能继续滴答作响

谢谢你的帮助

这就是我目前拥有的:

    public string i;
    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyValue == 68)
        {
            i = "right";
            backgroundWorker1.RunWorkerAsync();
        }
    }


private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        if (i == "right")
        {
            pictureBox1.Location = new Point((pictureBox1.Location.X + 17), pictureBox1.Location.Y);
        }
     }

后台线程或辅助线程是解决方案。下面是一个简单的后台工作程序

        BackgroundWorker bw = new BackgroundWorker();
        bw.DoWork += new DoWorkEventHandler(bw_DoWork);
        bw.RunWorkerAsync();
    }


    static Timer _t;
    static void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        _t = new Timer();
        _t.Start();
    }

后台线程或辅助线程是解决方案。下面是一个简单的后台工作程序

        BackgroundWorker bw = new BackgroundWorker();
        bw.DoWork += new DoWorkEventHandler(bw_DoWork);
        bw.RunWorkerAsync();
    }


    static Timer _t;
    static void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        _t = new Timer();
        _t.Start();
    }

您需要实现一个在后台运行的线程来跟踪计时器,或者使用Backgroundworker类来完成这项工作。如果需要精确计时器,请使用System.Threading.Timer类

希望这有帮助, 顺致敬意,
Tom。

您需要实现一个在后台运行的线程来跟踪计时器,或者使用Backgroundworker类来为您执行此操作。如果需要精确计时器,请使用System.Threading.Timer类

希望这有帮助, 顺致敬意,
Tom。

使用调试器运行程序时,请查看输出窗口。您将看到许多非法操作异常消息。后台工作程序方法因异常而死亡,您没有注意到它,因为您没有检查DoWorkCompleted事件处理程序中的e.Error属性。这就是它不动的原因


不允许在后台线程中设置控件的属性。这就是例外情况试图告诉你的。您需要放弃使用线程来实现UI逻辑的想法。游戏通常通过一个。

在使用调试器运行程序时查看输出窗口来实现。您将看到许多非法操作异常消息。后台工作程序方法因异常而死亡,您没有注意到它,因为您没有检查DoWorkCompleted事件处理程序中的e.Error属性。这就是它不动的原因


不允许在后台线程中设置控件的属性。这就是例外情况试图告诉你的。您需要放弃使用线程来实现UI逻辑的想法。游戏通常使用。

来实现。谢谢你的帮助,我会给你一个机会,希望它能有所帮助。此外,这可能取决于处理绘图和处理代码的线程,如果您在ui线程上的keydown事件中处理正确,则可能会在那里阻塞。感谢您的帮助,我将对此进行一次尝试,希望它有所帮助。此外,这可能取决于处理绘图和处理代码的线程,如果您在ui线程上的keydown事件中处理正确,则可能会在那里阻塞。