当前位置: 首页 > 知识库问答 >
问题:

在循环c中等待x秒#

段曦
2023-03-14

我试图制作一个简单的应用程序来学习c(Visual Studio)中的一些东西。现在我正在制作一个音乐播放器,其中一个动作是在按钮点击事件中淡出音乐。

我对构建淡出部分没有问题,我做了一个while循环,每次循环运行时都将音量降低1%。此外,我还使用淡入度值更新标签。

唯一的问题是,为了减缓褪色,我正在使用线程。睡眠事件,该部分将冻结我的应用程序,并阻止使用淡入淡出值对我的文本标签进行任何更新。

淡入效果很好,所以我唯一要做的是另一个选择,即建立一些延迟。在这里的一些主题上,我确实读到了关于计时器的内容,并且在Visual Studio中添加了一个计时器组件。唯一的问题是,我刚接触c#,不知道如何在这个while循环中正确使用它。

有人能帮我一下吗?

当前代码为:

    private void BtnPodiumtune1Fadeout_Click(object sender, EventArgs e)
    {
        PlayerPodiumtune1.settings.volume = 100;
        fade1 = 100;
        while (fade1 != -1)
        {
            PlayerPodiumtune1.settings.volume = fade1;
            Fadelevel1.Text = fade1.ToString();
            System.Threading.Thread.Sleep(30);
            fade1 = fade1 - 1;
        }
        PlayerPodiumtune1.Ctlcontrols.stop();
    }

共有2个答案

丘向荣
2023-03-14

这是C#中的控制台应用程序:

using System;

namespace WaitAsync
{
    class Program
    {

        static void Main(string[] args)
        {
            bool ok = false;

            Console.Write("EnterTime (Seconds): ");
            int time = Convert.ToInt32(Console.ReadLine()) * 1000;

            while (ok != true)
            {
                System.Threading.Thread.Sleep(time);
                ok = true;
                Console.WriteLine("Waiting Time Just Finished");
            }
            Console.ReadLine();
        }
    }
}
明松
2023-03-14

您可以使用这样的模式来代替计时器。计时器是一种很好的方式,只需将此选项抛出即可:

private async void button_Click(object sender, EventArgs e)
{
  if (Monitor.TryEnter(sender))
  {
    int fade1 = 1000;
    while (fade1 != -1)
    {
      await Task.Delay(30);
      fade1--;
    }
  }
}

所以发送器是按钮,监视器是。TryEnter可防止在功能完成之前再次运行该功能async告诉框架此函数可以异步执行,并且是等待所必需的<代码>等待将线程的控制权返回到UI,直到任务完成。

PS--您需要类似于监视器的东西。顺便说一句,尝试输入(TryEnter),以防止重新进入基于计时器的解决方案。

 类似资料:
  • 问题内容: 我正在使用bluebird,方法 getAll 和 update return promises。我如何说“等到两个承诺返回,然后更新currentProduct值”?我对JS很陌生… 问题答案: 如果可以使用/,这将很简单。 或者,如果您只能使用简单的承诺,则可以遍历所有产品,并将每个承诺置于最后一个循环中。这样,仅当前一个问题解决时,它才会前进到下一个问题(即使它将首先迭代整个循环

  • 本文向大家介绍JavaScript 异步等待循环,包括了JavaScript 异步等待循环的使用技巧和注意事项,需要的朋友参考一下 示例 在循环中使用异步等待时,您可能会遇到其中一些问题。 如果您只是尝试在内部使用await forEach,则会抛出Unexpected token错误。 这是因为您错误地将箭头功能视为一个块。该await会在回调函数,这是不是上下文async。 解释器可以防止我们

  • 我有一个控制器类,它需要为列表中的每个项目执行各种异步操作: 对于每个A 播放音频并等待完成 等t秒 对于A的每个子部分B: 播放音频并等待 等待t2秒 当我的方法被激发。我试着回复听众: 但最后我还是无法摆脱内部循环,这让我觉得整个想法都行不通。我已经查看了未来的界面,但这似乎也不是我想要的。 我知道我可以用一堆变量来解决这个问题,以跟踪我在状态流中的位置,但是带有一些框架的循环会更干净。谢谢:

  • 问题内容: 在循环中使用/ 是否有任何问题?我试图遍历文件数组和每个文件的内容。 这段代码确实有效,但是这可能会出问题吗?我让某人告诉我,您不应该在这样的高阶函数中使用/ ,所以我只是想问一下这是否有问题。 问题答案: 确保代码确实有效,但是我很确定它不会实现您期望的功能。它只会触发多个异步调用,但此后函数会立即返回。 顺序阅读 如果要顺序读取文件, 则不能使用。只需使用现代循环即可,该循环将按预

  • 我有一个endpoint生成一些数据(需要一些时间),另一个endpoint可以用来获取生成的数据。我用wait调用第一个,从响应中获取id,并想调用第二个,而它的状态不是“Success”(它表示响应中准备和存储的数据),并继续我的脚本。 这是我的代码 它的工作,但我赢得了这么多的请求,我如何设置一些请求的间隔?我尝试使用await setInterval(),但是代码继续执行,没有等待结果 e

  • 问题内容: 我想问这个问题,因为我不确定我是否正确使用了Node.js逻辑 我有一组ID,需要使用redis的get方法进行查询。在检查了某个值之后(假设我正在检查通过给定的“键”获取的对象是否具有空名称),然后将它们添加到列表中。这是我的示例代码; 但是由于Node的异步特性,正如预期的那样,如果不检查列表中的每个id,它将执行“ Goes here …”。我的需要是在检查每个id之后应用其余过