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 が 2 つのオブジェクト パラメータを持つことを期待しています。オブジェクト パラメータおよび 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

また、イベント ハンドラーを作成するために、標準の名前付きメソッドを使用する必要がないことにも注意してください。ラムダを使用してその場で行うことができます:

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 に答える