【问题标题】:How do I trigger an event X seconds after a button has been clicked in a Xamarian iOS application?如何在 Xamarian iOS 应用程序中单击按钮后 X 秒触发事件?
【发布时间】:2017-12-30 00:18:21
【问题描述】:

我正在自学 C#,作为其中的一部分,我正在尝试开发一个 iOS 倒数计时器应用程序,该应用程序将在单击计时器启动按钮 X 秒后播放 .wav 声音文件,因为计时器值已从X 到 0。

为了做到这一点,我尝试使用 System.Timers 命名空间,但无法弄清楚如何对上述倒数计时器进行编程。下面是我的不完整代码(显然不能实现上述功能但可能是实现该功能的完整代码的一部分):

partial void UIButton1416_TouchUpInside(UIButton sender)
{
  url = NSUrl.FromFilename("Sounds/bell.wav");
  bell = new SystemSound(url);

  int RoundedTimerValue = Convert.ToInt32(Math.Round(TimerSlider.Value, 0));

  System.Timers.Timer timer = new System.Timers.Timer();
  timer.Interval = 60000;
  timer.Enabled = true;
}

有谁知道如何创建所描述的倒数计时器/在单击按钮 X 秒后触发事件?

【问题讨论】:

  • 订阅 Timer.Elapsed 并在你想做的任何事情之后清除滴答事件中的 Timer

标签: c# ios xamarin timer


【解决方案1】:

示例代码。

Timer timer = new Timer();
        timer.Interval = 60000;
                    timer.Elapsed += new ElapsedEventHandler((x,y) => {
                    //Do whatever you want
                    timer.Stop();
            });

将以下代码放入按钮点击处理程序中,并使 timer 变量成为全局变量。

  timer.Start();

或者您可以将所有内容留在 Button 的点击处理程序中,这没什么大不了的。

解释: 计时器类有一个名为 Elapsed 的事件,当计时器的 Interval 中的指定毫秒数结束时调用该事件。用线

timer.Elapsed += new ElapsedEventHandler((x,y) => {...

我们正在分配一个委托(虚拟函数)在计时器到时被调用。因此,大括号{} 中的任何代码都将在每 Timer.Interval 毫秒被调用一次。我们当时停止计时器,因为我们不希望它继续运行并生成大量事件。

更新 2:

通常,事件处理程序是使用

定义的
return_type functionName(object sender, EventArgs e);

但是由于委托是虚拟的,所以参数也是虚拟的。 x 对应发送者,y 对应 e

事件处理程序代码也可以写成如下

void someFunction(object sender, ElapsedEventArgs e)
{
   timer.Stop();
}

然后,

timer.Elapsed += new ElapsedEventHandler(someFunction);

至于“=>”,您可以阅读 Lambda 表达式Here

【讨论】:

  • 您能解释一下“timer.Elapsed += new ElapsedEventHandler((x,y) =>” 的作用吗?
  • @K.Claesson 完成。
  • 谢谢,我对事件 Elapsed 的理解要好得多。但是,我不明白 (x, y) 和 => 的作用。
  • @K.Claesson 也这样做了
猜你喜欢
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多