在存在axWindowsMediaPlayer的WinForms C#中的timer1_Tick事件

时间:2016-01-13 07:15:02

标签: c# winforms visual-studio-2013 timer axwindowsmediaplayer

注意:此应用程序将设计用于触控设备(MS Surface Hub)

我的Windows窗体包含axWindowsMediaPlayer组件。我创建了一个播放列表,我可以在播放列表中循环播放媒体文件。但是,我希望我的axWindowsMediaPlayer播放列表在5秒(仅用于测试/调试目的的时间限制)之后暂停不活动(用户没有输入更精确)并显示一个对话框询问我我是否愿继续。

以下是设置timer_Tick事件的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TimerDemo
{
  public partial class Form1 : Form
  {
    [DllImport("user32.dll")]
    public static extern Boolean GetLastInputInfo(ref tagLASTINPUTINFO plii);

    public struct tagLASTINPUTINFO
    {
      public uint cbSize;
      public Int32 dwTime;
    }

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        axWindowsMediaPlayer1.Ctlenabled = true;
        var pl = axWindowsMediaPlayer1.playlistCollection.newPlaylist("MyPlaylist");
        pl.appendItem(axWindowsMediaPlayer1.newMedia(@"C:\ABC\abc1.mp4"));
        pl.appendItem(axWindowsMediaPlayer1.newMedia(@"C:\ABC\abc2.mp4"));
        axWindowsMediaPlayer1.currentPlaylist = pl;
        axWindowsMediaPlayer1.Ctlcontrols.play();
    }

    private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
    {
        if (e.newState == 8)   //Media Ended
        {                
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        tagLASTINPUTINFO LastInput = new tagLASTINPUTINFO();
        Int32 IdleTime;
        LastInput.cbSize = (uint)Marshal.SizeOf(LastInput);
        LastInput.dwTime = 0;

        if (GetLastInputInfo(ref LastInput))
        {
            IdleTime = System.Environment.TickCount - LastInput.dwTime;                
            if (IdleTime > 5000)
            {
                axWindowsMediaPlayer1.Ctlcontrols.pause();
                timer1.Stop();
                MessageBox.Show("Do you wish to continue?");
            }
            else
            {
            }
            timer1.Start();
            axWindowsMediaPlayer1.Ctlcontrols.play();
        }
    }
  }
}

使用此代码,应用程序未进入timer1_Tick事件。

查询:

  1. e.newState == 3中的axWindowsMediaPlayer (播放状态)是否被视为输入?
  2. 如何确保应用程序进入timer1_Tick事件?
  3. 如果删除代码的axWindowsMediaPlayer部分,则timer1_Tick事件正在响应。

1 个答案:

答案 0 :(得分:1)

要让您的应用程序进入timer_Tick事件,首先需要启动计时器

替换以下代码:

public Form1()
{
    InitializeComponent();
}

使用以下内容:

public Form1()
{
    InitializeComponent();
    timer1.Start();
}

这应该适合你。