Winforms 定时器速度VS无限while循环

Winforms 定时器速度VS无限while循环,winforms,c++-cli,Winforms,C++ Cli,我有下一个问题。在windows窗体中,我需要制作一个模拟while循环的计时器。我已经运行了一些测试,一个while循环比一个间隔为1的计时器快27倍。所以我的问题是,如何用计时器模拟while循环。这是我用来测试间隔的代码: private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { m_nI++; lbltimer->Text

我有下一个问题。在windows窗体中,我需要制作一个模拟while循环的计时器。我已经运行了一些测试,一个while循环比一个间隔为1的计时器快27倍。所以我的问题是,如何用计时器模拟while循环。这是我用来测试间隔的代码:

private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) {
             m_nI++;
             lbltimer->Text = m_nI++.ToString();
             if (m_nI > 10000000)
                 {
                     timer1->Enabled = false;
                 }

             while(1)
             {
                 m_nIMin++;
                 lblLoop->Text = m_nIMin.ToString();
                 Application::DoEvents();
                 if (m_nIMin > 10000000)
                 {
                     break;
                 }
             }
         }
m_nI和m_nIMin一样被声明为全局的,它们都是整数。欢迎使用C++或CLI或C++进行任何响应。提前谢谢


另外,我知道Application::DoEvents()不好用,但它是在windowsforms中测试无限while循环的唯一解决方案。

计时器分辨率由系统心跳给出。这通常默认为64拍/秒,即15.625毫秒。但是,有一些方法可以修改这些系统范围的设置,以实现低至1毫秒左右的计时器分辨率

有关更多详细信息,请阅读


另一方面,
循环持续运行,如果使用不当,可能会导致UI冻结。

你想用这些代码实现什么?对于我目前正在进行的项目来说,实现速度非常重要。整个问题没有任何意义。如果需要while循环,那么使用while循环。当然,不要在Timer_Tick事件处理程序中使用它。如果不占用UI,就不能在UI线程上运行阻塞循环。这就是为什么你需要做这些事。使用后台线程解决问题。你能给我一个后台线程的示例代码吗?我将以此作为答案。UI线程只需要做对人类有意义的事情。世卫组织的眼睛完全无法看到以1毫秒为增量的数字变化。这是一个完全模糊,在50毫秒更新时开始变得模糊。对于一个计时器来说足够慢了,一个hot while()循环完全是多余的。避免编写无意义的代码,这样的问题就会消失。但我如何实现与while循环相同的速度,这只是我通过计时器提出的问题,你不能。。。。但是您可以通过知道循环的一次迭代需要多少时间来找到解决方法(称为jugaad),并在一个计时器事件中运行循环那么多次。。。。。。。或者,使用Application.DoEvents运行while循环(但在使用DoEvents之前读取)