WinForm嵌入LibVLC播放器实现播放指定时长后自动关闭的实现方法
WinForm LibVLC播放器5分钟自动关闭实现方案
你可以直接使用WinForm原生的System.Windows.Forms.Timer实现定时关闭逻辑,不会出现跨线程操作UI控件的异常,修改步骤如下:
- 首先在窗体类中声明类级别的定时器变量
// 放在窗体类的成员声明区域,和你原有_libVLC、_videoView等变量同级 private System.Windows.Forms.Timer _autoCloseTimer;
- 修改
PlayerForm_Load方法,新增定时器启动逻辑
private void PlayerForm_Load(object sender, EventArgs e) { Core.Initialize(); _libVLC = new LibVLC(); _videoView.MediaPlayer = new MediaPlayer(_libVLC); _videoView.Dock = DockStyle.Fill; // Add it to the form Controls.Add(_videoView); var uri = new Uri(videolink); var media = new Media(_libVLC, uri, ":input-repeat=65535"); _videoView.MediaPlayer.Media = media; _videoView.MediaPlayer.Play(); //Set fullscreen this.FormBorderStyle = FormBorderStyle.None; this.Size = screen.Bounds.Size; this.Location = screen.Bounds.Location; // 以下为新增自动关闭逻辑 _autoCloseTimer = new System.Windows.Forms.Timer(); // 定时时长设置为5分钟,单位为毫秒 _autoCloseTimer.Interval = 5 * 60 * 1000; _autoCloseTimer.Tick += AutoCloseTimer_Tick; _autoCloseTimer.Start(); }
- 新增定时器触发事件方法,处理停止播放、资源释放和窗口关闭逻辑
private void AutoCloseTimer_Tick(object sender, EventArgs e) { // 停止并释放定时器 _autoCloseTimer.Stop(); _autoCloseTimer.Dispose(); // 释放播放器资源 if (_videoView.MediaPlayer.IsPlaying) { _videoView.MediaPlayer.Stop(); } _videoView.MediaPlayer.Dispose(); _libVLC.Dispose(); // 关闭当前播放窗口 this.Close(); }
补充注意事项
建议在窗体的FormClosing事件中新增兜底的资源释放逻辑,避免用户手动关闭窗口时出现资源泄漏:
private void PlayerForm_FormClosing(object sender, FormClosingEventArgs e) { // 定时器未触发的话先释放定时器 if (_autoCloseTimer != null && _autoCloseTimer.Enabled) { _autoCloseTimer.Stop(); _autoCloseTimer.Dispose(); } // 释放播放器相关资源 if (_videoView.MediaPlayer != null) { if (_videoView.MediaPlayer.IsPlaying) { _videoView.MediaPlayer.Stop(); } _videoView.MediaPlayer.Dispose(); } _libVLC?.Dispose(); }
内容的提问来源于stack exchange,提问作者Malik Mehmood
相关产品推荐
相关产品推荐

