7

我正在 Windows 8 Visual Studio 11 中开发一个应用程序,我想为 DispatcherTimer 实例定义一个事件处理程序,如下所示:

public sealed partial class BlankPage : Page
    {

        int timecounter = 10;
        DispatcherTimer timer = new DispatcherTimer();
        public BlankPage()
        {
            this.InitializeComponent();
            timer.Tick += new EventHandler(HandleTick);
        }

        private void HandleTick(object s,EventArgs e)
        {

            timecounter--;
            if (timecounter ==0)
            {
                //disable all buttons here
            }
        }
        .....
}

但我收到以下错误:

Cannot implicitly convert type 'System.EventHandler' to 'System.EventHandler<object>'

我是寡妇 8 应用程序的新手开发人员。

你能帮帮我吗?

4

3 回答 3

8

差不多了 :) 你不需要实例化一个新的事件处理程序对象,你只需要指向处理事件的方法。因此,一个事件处理程序。

        int timecounter = 10;
    DispatcherTimer timer = new DispatcherTimer();
    public BlankPage()
    {
        this.InitializeComponent();

        timer.Tick += timer_Tick;
    }

    protected void timer_Tick(object sender, object e)
    {
        timecounter--;
        if (timecounter == 0)
        {
            //disable all buttons here
        }
    }

尝试阅读委托以了解事件了解 C# 中的事件和事件处理程序

于 2012-05-05T22:22:39.653 回答
3

您的代码期望 HandleTick 有两个 Object 参数。不是对象参数和 EventArg 参数。

private void HandleTick(object s, object e)

不是

private void HandleTick(object s,EventArgs e)

这是在 Windows 8 上发生的变化。

于 2013-01-28T05:00:52.997 回答
2

WinRT 比标准 .NET 运行时更多地使用泛型。WinRT 中定义的DispatcherTimer.Tick在这里

public event EventHandler<object> Tick

虽然WPF DispatcherTimer.Tick 在这里 公共事件 EventHandler Tick

另请注意,您不必使用标准命名方法来创建事件处理程序。您可以使用 lambda 来完成它:

int timecounter = 10;
DispatcherTimer timer = new DispatcherTimer();
public BlankPage()
{
    this.InitializeComponent();

    timer.Tick += (s,o)=>
    {
       timecounter--;
       if (timecounter == 0)
       {
           //disable all buttons here
       }
    };
}
于 2012-10-24T11:44:01.503 回答