【问题标题】:CountDown timer in windows phonewindows phone 中的倒数计时器
【发布时间】:2015-02-14 21:30:41
【问题描述】:

如何在我的 Windows Phone 8.1 应用中实现倒计时?似乎没有可用的信息。我能找到的所有应用程序都适用于 Windows 窗体应用程序或 Windows 应用程序,但它们似乎都不适用于手机应用程序。这就是我正在做的 -

namespace Timer
{
    public partial class MainPage : Page
    {           
        DispatcherTimer mytimer = new DispatcherTimer();
        int currentcount = 0;
        public MainPage()
        {
            InitializeComponent();

            mytimer = new DispatcherTimer();
            mytimer.Interval = new TimeSpan(0, 0, 0, 1, 0);
            mytimer.Tick += new EventHandler(mytime_Tick);
              //HERE error comes Cannot implicitly convert type System.EventHandler to System.EventHandler<object>
        }

        private void mytime_Tick(object sender,EventArgs e)
        {
            timedisplayBlock.Text = currentcount++.ToString();    
        }

        private void startButton_Click(object sender, RoutedEventArgs e)
        {
            mytimer.Start();
        }
    }
}

但它给了我这个错误- Cannot implicitly convert type System.EventHandler to System.EventHandler&lt;object&gt;

【问题讨论】:

  • 你能发布你认为可行但没有用的代码吗?也许包括在 Windows 应用程序中工作的屏幕截图?
  • 使用超时时间为 1 秒的 DispatcherTimer
  • @AustinMullins 我已经用我的代码和错误编辑了我的问题。
  • @thumbmunkeys 我用过DispatcherTImer,但它给了我一个错误。

标签: c# visual-studio windows-phone-7 windows-phone-8


【解决方案1】:

你的增量不应该写成

timedisplayBlock.Text = (++currentcount).ToString();

或者

currentcount++;
timedisplayBlock.Text = currentcount.ToString();

我认为增量不会太重要,但仍应正确编写以确保不会让自己落后。 - 在下面的链接https://stackoverflow.com/a/7848129/2110465 上查看 Sergiol 与 David 的回答的问题@

我注意到的另一件事是您正在初始化 DispatcherTimer 两次...

DispatcherTimer mytimer = new DispatcherTimer();
...
..
mytimer = new DispatcherTimer();

最好在实例上进行初始化以节省开销,但这取决于使用范围。鉴于我不知道您的其余代码如何使用它,我建议将其重写如下

namespace Timer
{
    public partial class MainPage : Page
    {
        DispatcherTimer mytimer = new DispatcherTimer();
        int currentcount = 0;

        public MainPage()
        {
            InitializeComponent();

            mytimer.Interval = new TimeSpan(0, 0, 0, 1, 0);
            mytimer.Tick += new EventHandler(mytime_Tick);
        }

        private void mytime_Tick(object sender, EventArgs e)
        {
            timedisplayBlock.Text = (++currentcount).ToString();
        }

        private void startButton_Click(object sender, RoutedEventArgs e)
        {
            mytimer.Start();
        }
    }
}

综上所述,复制时我无法重现故障...

编辑 - 这可能是您的问题 (https://stackoverflow.com/a/16636862/2110465)

【讨论】:

    【解决方案2】:

    您拼错了事件处理程序名称,事件处理程序定义也需要更改,应该是:

    mytimer.Tick += mytime_Tick; // removed the 'r'
    

    【讨论】:

    • 现在我收到了这个错误-Cannot implicitly convert type System.EventHandler to System.EventHandler&lt;object&gt;
    • Cannot implicitly convert type System.EventHandler to System.EventHandler&lt;object&gt;
    • 是的,我已经用额外的r 修复了这个错误。现在它给了我我提到的这个新错误。
    • 我用 Windows phone silverlight 尝试了相同的代码,它可以工作,但是 windows phone 空白应用程序,它给出了上述错误?我该怎么做才能解决这个问题?还有 using System.Windows.Threading 不工作在blank app
    【解决方案3】:

    更改
    private void mytimer_Tick(object sender, EventArgs e)

    private void mytimer_Tick(object sender, object e).

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 2013-12-14
      • 2017-04-14
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多