播放器03:以文件夹的形式添加整个文件夹里面的文件到播放列表,播放刚加进来的第一首歌曲,默认顺序播放
播放器03:以文件夹的形式添加整个文件夹里面的文件到播放列表,播放刚加进来的第一首歌曲,默认顺序播放<div class="postText"><div id="cnblogs_post_body">初学C#记录历程,记录心情。
添加FolderBrowserDialog: folderBrowserDialog, 属性RootFolder 为Desktop,ShowNewFolderButton 为True
UI:
http://images.cnitblog.com/blog/480407/201212/20153651-cd871979ec1e402d8f171ff26f48e5aa.png
<div class="cnblogs_code" >http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gifhttp://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gifView Code <div id="cnblogs_code_open_a1a42f73-ba6e-468b-b0ae-3a149981f4b9" class="cnblogs_code_hide">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 using System.IO; 11 12 namespace OrderPlay 13 { 14 public partial class myAudioPlayer : Form 15 { 16 17 private bool close = false;// 关闭窗口标志位 18 private bool running = false;//线程结束标志位 19 protected List<string> playList = new List<string>();//定义一个list来保存加进到listbox里面的文件 20 21 22 //去掉文件路径,只留文件名字 23 public string DeletePath(string strName) 24 { 25 string afterDeletePath = ""; 26 int lastIndex=0; 27 lastIndex= strName.LastIndexOf("\\") + 1; //获取\ 在tempFileName中最后一次出现的索引位置 28 afterDeletePath = strName.Substring(lastIndex, strName.Length - lastIndex);//去掉文件路径,只取文件名字(取子字符串) 29 return afterDeletePath; 30 } 31 32 33 34 private void SaveFilesFolder() 35 { 36 string[] folderName = Directory.GetFiles(this.folderBrowserDialog.SelectedPath); 37 foreach (string f in folderName) 38 { 39 40 if (playList.Contains(f) == true) //不加重复的 41 { 42 continue; 43 } 44 else 45 { 46 playList.Add(f); 47 lstPlayer.Items.Add(DeletePath(f)); 48 49 } 50 51 } 52 53 } 54 //设置正在播放的歌曲为选中状态 55 private void PlaySelected() 56 { 57 int i=0; 58 for (i = 0; i < lstPlayer.Items.Count; i++) 59 { 60 if (mediaPlayer.URL == playList) 61 { 62 lstPlayer.SetSelected(i,true); 63 } 64 } 65 66 } 67 68 //顺序播放 69 private void OrderPlay() 70 { 71 if (!running) 72 { 73 // 启动另一线程检测 mediaPlayer 的播放状态,循环播放列表里的歌曲 74 running = true; 75 Thread thread = new Thread(new ThreadStart(this.CheckStatus)); 76 thread.IsBackground = false; //设置后台线程为false 77 thread.Start(); 78 } 79 } 80 81 82 //检查线程状态,顺序播放 83 private void CheckStatus() 84 { 85 while (running && !close) 86 { 87 try 88 { 89 if (mediaPlayer.playState == WMPLib.WMPPlayState.wmppsStopped && lstPlayer.Items.Count > 0)//是否播放停止且列表有文件 90 { 91 if (lstPlayer.InvokeRequired) //是否跨线程 92 { 93 lstPlayer.BeginInvoke(new MethodInvoker(() =>//BeginInvoke方法可以使用线程异步地执行委托所指向的方法 94 { 95 SetSelectedIndex(); 96 97 }), null); 98 } 99 else100 {101 SetSelectedIndex();102 103 }104 105 }106 107 }108 catch (Exception ex)109 {110 MessageBox.Show("出错" + ex.ToString());111 }112 System.Threading.Thread.Sleep(1000);//状态检测延时1秒,加快打开歌曲的速度113 }114 running = false;115 116 117 }118 119 //判断是否到最后一个,否则下移120 private void SetSelectedIndex()121 {122 123 if (lstPlayer.SelectedIndex + 1 >= lstPlayer.Items.Count)//是否到最下面124 {125 lstPlayer.SelectedIndex = 0; //回到第一个126 }127 else128 {129 lstPlayer.SelectedIndex = lstPlayer.SelectedIndex + 1; //下移130 }131 132 mediaPlayer.URL = playList; //播放133 134 }135 136 public myAudioPlayer()137 {138 InitializeComponent();139 mediaPlayer.uiMode = "Full";140 }141 142 143 private void addFolderToolStripMenuItem_Click(object sender, EventArgs e)144 {145 DialogResult result=this.folderBrowserDialog.ShowDialog();146 string[] folderName = Directory.GetFiles(this.folderBrowserDialog.SelectedPath);147 148 if(result==DialogResult.OK)149 {150 try151 {152 SaveFilesFolder();153 mediaPlayer.URL = folderName[0];154 PlaySelected();155 }156 catch (Exception ex)157 {158 MessageBox.Show("unable to load file\n\n" + ex.Message);159 }160 }161 162 OrderPlay(); //默认顺序播放 163 164 }165 166 }167 }
页:
[1]