private void PlayMusic(int iRow) { //lblTopTip.Text = ""; string strDownloadURL = ""; enmMusicSource emsSource = (enmMusicSource)dataGVscan.Rows[iRow].Cells["dgvSource"].Value; string strDownloadInfo = dataGVscan.Rows[iRow].Cells["dgvDownloadInfo"].Value.ToString(); string strDisplayName = dataGVscan.Rows[iRow].Cells["dgvDisplayName"].Value.ToString(); string strID = dataGVscan.Rows[iRow].Cells["dgvID"].Value.ToString(); string strFileName = m_strDocument + "\\" + m_strTempData; clsMusicOperation mop = new clsMusicOperation(); clsHttpDownloadFile hdf = new clsHttpDownloadFile(); try { if (!Directory.Exists(strFileName)) //如果不存在就创建 临时文件夹 { Directory.CreateDirectory(strFileName); } strDownloadURL = mop.GetMusicDownloadURL(strDownloadInfo, emsSource); if (strDownloadURL == "") { lblTip.Text = "无法获取歌曲“" + strDisplayName + "”的下载地址,试听失败!"; WriteLog("无法获取歌曲“" + strDisplayName + "”的下载地址,试听失败!"); return; } strFileName = strFileName + "\\" + strDownloadInfo + mop.GetFileFormat(); //临时文件夹 + dgvDownloadInfo + 格式 if (!(File.Exists(strFileName))) //不存在缓存,才下载 { if (!hdf.Download(strDownloadURL, strFileName)) { lblTip.Text = "播放发生错误,错误信息:获取音乐缓存失败。"; return; } } //播放音乐 lblTip.Text = "播放音乐序号:" + strID + " 歌曲名:" + strDisplayName; axWindowsMediaPlayer1.URL = strFileName; axWindowsMediaPlayer1.Ctlcontrols.play(); //lblMusicTime.Text = axWindowsMediaPlayer1.currentMedia.durationString; timer1.Enabled = true; } catch (Exception e) { lblTip.Text = "发生错误,错误信息:" + e.Message; WriteLog(strDisplayName + " 试听发生错误,错误信息:" + e.Message); } }
/// <summary> /// 下载音乐的线程 /// </summary> /// <param name="oRow">object oRow = (object)iRow;</param> private void DownloadMusicThread(object oRow) { int iRow = (int)oRow; string strDownloadURL = ""; string strName = dataGVscan.Rows[iRow].Cells["dgvName"].Value.ToString(); string strSinger = dataGVscan.Rows[iRow].Cells["dgvSinger"].Value.ToString(); string strDownloadInfo = dataGVscan.Rows[iRow].Cells["dgvDownloadInfo"].Value.ToString(); //int intSource = Convert.ToInt32(dataGVscan.Rows[iRow].Cells["dgvSource"].Value); enmMusicSource emsSource = (enmMusicSource)dataGVscan.Rows[iRow].Cells["dgvSource"].Value; string strFileName = m_strDocument; clsMusicOperation mop = new clsMusicOperation(); clsHttpDownloadFile hdf = new clsHttpDownloadFile(); string strTempFile = m_strDocument + "\\" + m_strTempData + "\\" + strDownloadInfo;//临时文件 string strFormat = ".mp3"; int i = 0; bool bolExistsTempFile = false; //是否存在缓存 bool bolDownloadStatus = false; //是否下载成功 //lblTip.Text = "正在下载……"; //SetTipText("正在下载……" + strName); lblTip.Invoke(TipCallBack, "正在下载…… " + strName);//调用回调//因为线程无法条用主线的一些控件,必须通过回调函数实现 try { if (!Directory.Exists(strFileName)) //如果不存在 m_strDocument 就创建 { Directory.CreateDirectory(strFileName); } if ((File.Exists(strTempFile + ".mp3")) || (File.Exists(strTempFile + ".m4a")))//如果存在缓存,不再下载,直接复制 { bolExistsTempFile = true; if ((File.Exists(strTempFile + ".mp3"))) { strTempFile = strTempFile + ".mp3"; strFormat = ".mp3"; } if (File.Exists(strTempFile + ".m4a")) { strTempFile = strTempFile + ".m4a"; strFormat = ".m4a"; } } else //如果不存在,则需要先获取URL,再下载 { strDownloadURL = mop.GetMusicDownloadURL(strDownloadInfo, emsSource); if (strDownloadURL == "") { lblTip.Invoke(TipCallBack, "无法获取歌曲“" + strName + "”的下载地址,下载失败!"); WriteLog("无法获取歌曲“" + strName + "”的下载地址,下载失败!"); return; } strFormat = mop.GetFileFormat(); } strFileName = strFileName + "\\" + GetFileName(iRow) + strFormat; //设置文件名 while (File.Exists(strFileName)) //如果存在文件,则添加序号,直到获取到一个可创建的文件名 { i++; if (i == 1) { strFileName = strFileName.Insert(strFileName.Length - 4, "(" + i + ")");// } else { strFileName = strFileName.Replace("(" + (i - 1) + ")", "(" + i + ")"); } } if (bolExistsTempFile) { File.Copy(strTempFile, strFileName, true);//三个参数分别是源文件路径,存储路径,若存储路径有相同文件是否替换 //File.Move(strTempFile.Replace("\\" + m_strTempData, ""), strFileName);//修改文件名 bolDownloadStatus = true; } else { if (hdf.Download(strDownloadURL, strFileName)) { //SetTipText(strName + "下载完成!"); //lblTip.Text = "下载完成!"; //mop.ChangeFileAttribute(strFileName, dataGVscan.Rows[iRow].Cells["dgvName"].Value.ToString(), dataGVscan.Rows[iRow].Cells["dgvSinger"].Value.ToString()); bolDownloadStatus = true; } else { //SetTipText("存在歌曲下载失败,请查看日志!"); //lblTip.Text = "下载失败,该名称歌曲可能已经存在,请修改Music文件下的同名歌曲;或者网络出现问题,请检查网络!"; WriteLog("歌曲:" + strName + " 下载失败,可能网络出现问题,请检查网络!"); //MessageBox.Show("歌曲:" + strName + " 下载失败,该名称歌曲可能已经存在,请修改Music文件下的同名歌曲;或者网络出现问题,请检查网络!"); lblTip.Invoke(TipCallBack, "歌曲:" + strName + " 下载失败,可能网络出现问题,请检查网络!"); bolDownloadStatus = false; } } if (bolDownloadStatus) { WriteLog(strName + " 下载完成!"); lblTip.Invoke(TipCallBack, strName + " 下载完成!"); if (strFormat.ToLower() == ".mp3") { //axWindowsMediaPlayer2.Invoke(MusicInfoCallBack, strFileName, strName, strSinger, ""); SetMusicInfo(strFileName, strName, strSinger);//设置歌曲信息 } } } catch (Exception e) { //SetTipText("下载线程发生错误,请查看日志!错误信息:" + e.Message); //lblTip.Text = "发生错误,错误信息:" + e.Message; WriteLog("歌曲:" + strName + " 下载失败,错误信息:" + e.Message); //MessageBox.Show("歌曲:" + strName + " 下载失败,错误信息:" + e.Message); lblTip.Invoke(TipCallBack, "歌曲:" + strName + " 下载失败,错误信息:" + e.Message); } }