珠isme 发表于 2013-1-2 23:05:56

播放器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]
查看完整版本: 播放器03:以文件夹的形式添加整个文件夹里面的文件到播放列表,播放刚加进来的第一首歌曲,默认顺序播放