none
C++中关于 DispatcherTimer的使用 RRS feed

  • 问题

  • 哪位高手帮忙下,C#关于 DispatcherTimer的使用我看过,但是在C++中如何使用 DispatcherTimer呢,有相关例子么?如下方法哪里有问题呢?

    DispatcherTimer^ timer;
      timer = ref new DispatcherTimer();
      timer->Interval = ref new TimeSpan(0,1);//间隔1秒  error C2661: “Windows::Foundation::TimeSpan::TimeSpan”: 没有重载函数接受 2 个参数
      timer->Tick+=ref new EventHandler(fun);  error C2955: “Windows::Foundation::EventHandler”: 使用类 泛型 需要 泛型 参数列表
      timer->Start();

    void fun()

    {

    }

    谢谢!


    • 已编辑 JJ李锋 2012年6月14日 9:23
    2012年6月14日 9:22

答案

全部回复

  • 上面的方法不正确,已经改为如下:

     auto timer = ref new DispatcherTimer;
     timer->Tick += ref new Windows::Foundation::EventHandler<Platform::Object^>(this, &TKLord::TKGamePage::timer_tick); //这里还是会报错

     TimeSpan ts;
     ts.Duration=1*10000000;//1s
     timer->Interval = ts;
     timer->Start();

    void timer_tick()

    {

    }

    错误如下: error C2664: “Windows::Foundation::EventHandler<T>::{ctor}::__abi_PointerToMemberCapture::{ctor}::__abi_PointerToMemberCapture(TObject ^,void (__cdecl TKLord::TKGamePage::* )(Platform::Object ^,Platform::Object ^))”: 不能将参数 2 从“Platform::Object ^(__cdecl TKLord::TKGamePage::* )(void)”转换为“void (__cdecl TKLord::TKGamePage::* )(Platform::Object ^,Platform::Object ^)”
    1>          with
    1>          [
    1>              T=Platform::Object ^,
    1>              TObject=TKLord::TKGamePage
    1>          ]

    为什么会报错呢原因是 timer_tick是void类型?后来设置为Platform::Object ^也不可以,错误相同!麻烦高手帮帮忙,谢谢!

    2012年6月14日 11:53
  • 看我这个http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/edff3bf2-4223-49fe-b66b-119702458700  一样的问题。 仅需将 Windows.UI.Xaml.EventHandler 改成 Windows::Foundation::EventHandler<Object^>

    	DispatcherTimer^ timer = ref new DispatcherTimer;
    	timer->Tick += ref new Windows::Foundation::EventHandler<Platform::Object^>(this, &MainPage::DispatcherTimer_Tick);
    	TimeSpan t;
    	t.Duration=1000;
    	timer->Interval = t;
    	timer->Start();
    ......
    
    void MainPage::DispatcherTimer_Tick(Platform::Object^ sender, Platform::Object^ e)
    {
       // TO DO...
    }


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 JJ李锋 2012年6月15日 6:16
    2012年6月15日 5:25
    版主
  • MainPage.h头文件中定义:

     private:
        void DispatcherTimer_Tick(Platform::Object^ sender, Platform::Object^ e);


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月15日 5:26
    版主
  • 多谢Bob Bao!已经可以正常使用
    2012年6月15日 5:58