none
有关OpenNETCF.WindowsCE.LargeIntervalTimer的问题 RRS feed

  • 问题

  • 首先非常感谢黄季冬老师,谢谢你的帮助,但是我按照你的提示,我用了OpenNETCF.WindowsCE.LargeIntervalTimer好像根本不执行的,麻烦帮我看看。我的运行环境是VS2008

    WM5.0模拟器

    Private WithEvents m_lit As New OpenNETCF.WindowsCE.LargeIntervalTimer

     

    m_lit.FirstEventTime = DateTime.Now.AddMinutes(3)

    m_lit.Interval = New TimeSpan(0, 0, 3, 0)

    m_lit.OneShot = False

    m_lit.Enabled = True

     

    Private Sub mlit_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles m_lit.Tick

     

    End Sub

    或者

      dim m_lit As New OpenNETCF.WindowsCE.LargeIntervalTimer

      m_lit.FirstEventTime = DateTime.Now.AddMinutes(1)

            m_lit.Interval = New TimeSpan(0, 0, 1, 0)

            m_lit.OneShot = False
            AddHandler m_lit.Tick, AddressOf mlit_Tick

            m_lit.Enabled = True

     

    Private Sub mlit_Tick(ByVal sender As Object, ByVal e As System.EventArgs)

     

    End Sub

    2008年8月29日 3:32

答案

  • 您好,

    1.我没有安装VB编译器,不过类似的以下C#的代码在我的SamSung i718上运行良好:

    Code Snippet

            public Form1()
            {
                InitializeComponent();
                lit = new LargeIntervalTimer();
            }

     

            private LargeIntervalTimer lit;


     

            private void button1_Click(object sender, EventArgs e)
            {
                lit.FirstEventTime = DateTime.Now.AddMinutes(1);
                lit.Interval = new TimeSpan(0, 1, 0);
                lit.OneShot = false;
                lit.Tick += new EventHandler(lit_Tick);
                lit.Enabled = true;
            }

     

            void lit_Tick(object sender, EventArgs e)
            {
                MessageBox.Show("ticking");
            }

     

     

    2.如果您的问题在特定的设备上一仍然一直出现,估计是OAL实现的问题了,可以象OEM方咨询有关Clock的内容

     

    3.建议您不要使用模拟器测试

     

    黄季冬

    http://fox23.cnblogs.com

     

     

    2008年8月30日 8:08
    版主
  •  hdd3717 写:

    您好,有一事请教

    Code Snippet

     void lit_Tick(object sender, EventArgs e)
            {
                MessageBox.Show("ticking");
            }

     

    正常运行

     

    改成

    Code Snippet
    void lit_Tick(object sender, EventArgs e)
            {
               this.textBox1.Text ="ticking";
            }

     

    编译通过,运行出错,这是为什么?

     

    这样会有多线程的问题,就是你的tick并不是从创建textBox1的UI线程上跑的,.net framework2.0之后CLR都会提示有安全问题.这时需要为你的方法编写委托,并将其连同参数一起传给textBox1的invoke方法.

    关于control.invoke()请查看:

    http://msdn.microsoft.com/zh-cn/events/a1hetckb.aspx

     

    Best Regards,

     

    黄季冬

    http://fox23.cnblogs.com

     

    2008年10月28日 8:32
    版主

全部回复

  • 您好,

    1.我没有安装VB编译器,不过类似的以下C#的代码在我的SamSung i718上运行良好:

    Code Snippet

            public Form1()
            {
                InitializeComponent();
                lit = new LargeIntervalTimer();
            }

     

            private LargeIntervalTimer lit;


     

            private void button1_Click(object sender, EventArgs e)
            {
                lit.FirstEventTime = DateTime.Now.AddMinutes(1);
                lit.Interval = new TimeSpan(0, 1, 0);
                lit.OneShot = false;
                lit.Tick += new EventHandler(lit_Tick);
                lit.Enabled = true;
            }

     

            void lit_Tick(object sender, EventArgs e)
            {
                MessageBox.Show("ticking");
            }

     

     

    2.如果您的问题在特定的设备上一仍然一直出现,估计是OAL实现的问题了,可以象OEM方咨询有关Clock的内容

     

    3.建议您不要使用模拟器测试

     

    黄季冬

    http://fox23.cnblogs.com

     

     

    2008年8月30日 8:08
    版主
  • 您好,有一事请教

    Code Snippet

     void lit_Tick(object sender, EventArgs e)
            {
                MessageBox.Show("ticking");
            }

     

    正常运行

     

    改成

     

    Code Snippet
    void lit_Tick(object sender, EventArgs e)
            {
               this.textBox1.Text ="ticking";
            }

     

    编译通过,运行出错,这是为什么?

    2008年10月27日 11:07
  •  hdd3717 写:

    您好,有一事请教

    Code Snippet

     void lit_Tick(object sender, EventArgs e)
            {
                MessageBox.Show("ticking");
            }

     

    正常运行

     

    改成

    Code Snippet
    void lit_Tick(object sender, EventArgs e)
            {
               this.textBox1.Text ="ticking";
            }

     

    编译通过,运行出错,这是为什么?

     

    这样会有多线程的问题,就是你的tick并不是从创建textBox1的UI线程上跑的,.net framework2.0之后CLR都会提示有安全问题.这时需要为你的方法编写委托,并将其连同参数一起传给textBox1的invoke方法.

    关于control.invoke()请查看:

    http://msdn.microsoft.com/zh-cn/events/a1hetckb.aspx

     

    Best Regards,

     

    黄季冬

    http://fox23.cnblogs.com

     

    2008年10月28日 8:32
    版主