博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
播放器02:顺序播放,用到了InvokeRequired 属性和委托(Delegate)的BeginInvoke方法
阅读量:6192 次
发布时间:2019-06-21

本文共 6389 字,大约阅读时间需要 21 分钟。

初学C#记录历程,记录心情。

UI:

View Code
1                     using System;  2                     using System.Collections.Generic;  3                     using System.ComponentModel;  4                     using System.Data;  5                     using System.Drawing;  6                     using System.Linq;  7                     using System.Text;  8                     using System.Windows.Forms;  9                     using System.Threading; 10  11                     namespace OrderPlay 12                     { 13                         public partial class myAudioPlayer : Form 14                         { 15  16                             private bool close = false;// 关闭窗口标志位 17                             private bool running = false;//线程结束标志位 18                             protected List
playList = new List
(); //定义一个list来保存加进到listbox里面的文件 19 20 private void SaveFiles() 21 { 22 foreach (var fileName in openFileDialog.FileNames) 23 { 24 if (playList.Contains(fileName) == true) //不加重复的 25 { 26 continue; 27 } 28 else 29 { 30 playList.Add(fileName); //保存原始文件到playList 31 lstPlayer.Items.Add(DeletePath(fileName)); //添加文件到listbox 32 } 33 } 34 } 35 36 37 38 public myAudioPlayer() 39 { 40 InitializeComponent(); 41 mediaPlayer.uiMode = "Full"; 42 } 43 44 45 //双击播放列表里面的文件,播放 46 private void lstPlayer_MouseDoubleClick(object sender, MouseEventArgs e) 47 { 48 mediaPlayer.URL = playList[lstPlayer.SelectedIndex]; 49 50 } 51 52 private void orderPlayToolStripMenuItem_Click(object sender, EventArgs e) 53 { 54 if (!running) 55 { 56 // 启动另一线程检测 mediaPlayer 的播放状态,循环播放列表里的歌曲 57 running = true; 58 Thread thread = new Thread(new ThreadStart(this.CheckStatus)); 59 thread.IsBackground = false; //设置后台线程为false 60 thread.Start(); 61 } 62 if (lstPlayer.Items.Count == 0) 63 { 64 MessageBox.Show("No file in List"); 65 } 66 } 67 68 //检查线程状态,顺序播放 69 private void CheckStatus() 70 { 71 while (running && !close) 72 { 73 try 74 { 75 if (mediaPlayer.playState == WMPLib.WMPPlayState.wmppsStopped && lstPlayer.Items.Count > 0) //是否播放停止且列表有文件 76 { 77 if (lstPlayer.InvokeRequired) //是否跨线程 78 { 79 lstPlayer.BeginInvoke(new MethodInvoker(() =>//BeginInvoke方法可以使用线程异步地执行委托所指向的方法 80 { 81 SetSelectedIndex(); 82 }), null); 83 } 84 else 85 { 86 SetSelectedIndex(); 87 } 88 89 } 90 91 } 92 catch (Exception ex) 93 { 94 MessageBox.Show("出错" + ex.ToString()); 95 } 96 System.Threading.Thread.Sleep(1000);//状态检测延时1秒,加快打开歌曲的速度 97 } 98 running = false; 99 100 101 }102 103 private void SetSelectedIndex()104 {105 if (lstPlayer.SelectedIndex + 1 > lstPlayer.Items.Count - 1) //是否到最下面106 {107 lstPlayer.SelectedIndex = 0; //回到第一个108 }109 else110 {111 lstPlayer.SelectedIndex = lstPlayer.SelectedIndex + 1; //下移112 }113 mediaPlayer.URL = playList[lstPlayer.SelectedIndex]; //播放114 115 }116 117 private void threadOrderPlay_FormClosing(object sender, FormClosingEventArgs e)118 {119 this.close = true;120 }121 122 123 124 125 126 127 128 }129 }

 

 

转载于:https://www.cnblogs.com/bloomalone/archive/2012/12/18/2823660.html

你可能感兴趣的文章
Ubuntu编译安装Php,配置时出现:Configure: error: XML configuration could not be found
查看>>
【Touch&input 】指定输入方法类型(11)
查看>>
【SublimeText】【DeleteBlankLines】使用说明
查看>>
java基础-基本数据类型
查看>>
Java基础-Java中的Calendar和Date类
查看>>
网站制作 时光网11月4日又回来了
查看>>
项目资料
查看>>
mysql的简单查询
查看>>
Linux基础(第二周)
查看>>
Leetcode#163Sum Closest
查看>>
电脑城 Ghost XP SP3 笔记本专用版 2012.10
查看>>
跟马哥学linux (lesson 6)linux包管理程序rpm & yum
查看>>
我的友情链接
查看>>
android API8以上版本使用GridLayout
查看>>
oracle中关于处理小数点位数的几个函数()
查看>>
Redhat编译php-5.2.9出现error dereferencing pointer to incomplete type
查看>>
Linux双网卡配置两个网关导致网络无法使用
查看>>
git服务器修改ssh端口后配置方法
查看>>
dsp中的gel文件
查看>>
mysql5.5以上my.ini中设置字符集
查看>>