该程序采用多线程的技术及DataGridView单元格扩展的技术

1.获取下载列表

        private void GetDownList()
{
//System.Web.HttpUtility.UrlDecode(解密
try
{
List<Model.Novel> list = new List<Model.Novel>();
WebResponse response = null;
StreamReader reader = null;
string Result = "";
Uri uri = new Uri("请求的有声小说地址"); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri.AbsoluteUri);
request.Method = "GET";
response = request.GetResponse();
reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
Result = reader.ReadToEnd();
var htmlDocument = new HtmlAgilityPack.HtmlDocument();
htmlDocument.LoadHtml(Result);
var html = htmlDocument.DocumentNode;
var title = html.CssSelect("title");
foreach (var item in title)
{
//MessageBox.Show(item.InnerHtml.ToString());
}
int i = 0;
int m = 1;
var ul = html.CssSelect("ul");
foreach (var item in ul)
{
if (i == 8)
{
foreach (var item1 in item.CssSelect("li"))
{
string no = m < 10 ? "00" + m : m < 100 ? "0" + m : m.ToString();
Model.Novel novel = new Model.Novel();
novel.Title = "凡人修仙传" + no;//item1.CssSelect("a").ToArray()[0].InnerText;
novel.DownDesc = "我要下载";
novel.PlayFile = "播放";
novel.DownPath = "下载地址/凡人修仙传/凡人修仙传" + no + ".mp3";//item1.CssSelect("a").ToArray()[0].Attributes["href"].Value;
list.Add(novel);
m++;
}
}
i++;
}
dgvFileList.DataSource = list;
}
catch (Exception ex)
{
WriteError(ex.Message);
Application.Exit();
} }

  

2.下载文件的代码

public void DownloadFile(object RowIndex)
{
int index = RowIndex.GetDBNULLValue(0);
string url = dgvFileList.Rows[index].Cells["DownPath"].Value.ToString();
string filename = lblPath.Text + "\\" + dgvFileList.Rows[index].Cells["Title"].Value.ToString() + ".mp3";
float percent = 0;
try
{
System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);
System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
long totalBytes = myrp.ContentLength;
System.IO.Stream st = myrp.GetResponseStream();
System.IO.Stream so = new System.IO.FileStream(filename, System.IO.FileMode.Create);
long totalDownloadedByte = 0;
byte[] by = new byte[1024];
DateTime StartTime = DateTime.Now;
int osize = st.Read(by, 0, (int)by.Length);
while (osize > 0)
{
totalDownloadedByte = osize + totalDownloadedByte;
System.Windows.Forms.Application.DoEvents();
so.Write(by, 0, osize);
osize = st.Read(by, 0, (int)by.Length); DateTime EndTime = DateTime.Now;
TimeSpan ts = EndTime.Subtract(StartTime);
double iSpeed = totalDownloadedByte / ts.TotalSeconds;
dgvFileList[3, index].Value = Model.FileOperate.GetAutoSizeString(iSpeed, 2) + "/s"; percent = (float)totalDownloadedByte / (float)totalBytes * 100;
dgvFileList[2, index].Value = percent.GetDBNULLValue(0);
}
dgvFileList[3, index].Value = "下载完成,耗时" + Math.Round(DateTime.Now.Subtract(StartTime).TotalSeconds, 2) + "s";
so.Close();
st.Close();
}
catch (System.Exception ex)
{
WriteError(ex.Message);
}
}

winform音频播放器(有声小说[凡人修仙传])的更多相关文章

  1. HTML5 音频播放器-Javascript代码(短小精悍)

    直接上干货咯! //HTML5 音频播放器 lzpong 2015/01/19 var wavPlayer = function () { if(window.parent.wavPlayer) re ...

  2. IOS开发之简单音频播放器

    今天第一次接触IOS开发的UI部分,之前学OC的时候一直在模拟的使用Target-Action回调模式,今天算是真正的用了一次.为了熟悉一下基本控件的使用方法,和UI部分的回调,下面开发了一个特别简易 ...

  3. 【jquery】一款不错的音频播放器——Amazing Audio Player

    前段时间分享了一款视频播放器,点击这里.今天介绍一款不错的音频播放器——Amazing Audio Player. 介绍: Amazing Audio Player 是一个使用很方便的 Windows ...

  4. 与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成

    原文:与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成 [索引页][源码下载] 与众不同 win ...

  5. Unity3D音频播放器 动态装载组件

    大多数在线Unity有关如何只教程Unity在播放音乐.之后如何通过拖动它们无法继续添加音频文件 但有时在游戏中的对象要玩几个声音.这时候我们就需要使用代码控制,拖动推教程AudioClip颂值的方法 ...

  6. 最简单的基于FFMPEG+SDL的音频播放器 ver2 (采用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的音频播放器系列文章列表: <最简单的基于FFMPEG+SDL ...

  7. OCiOS开发:音频播放器 AVAudioPlayer

    简单介绍 AVAudioPlayer音频播放器可以提供简单的音频播放功能.其头文件包括在AVFoudation.framework中. AVAudioPlayer未提供可视化界面,须要通过其提供的播放 ...

  8. 最简单的基于FFMPEG+SDL的音频播放器 ver2 (採用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的音频播放器系列文章列表: <最简单的基于FFMPEG+SDL ...

  9. Wavesurfer.js音频播放器插件的使用教程

    Wavesurfer.js是一款基于HTML5 canvas和Web Audio的音频播放器插件,本文主要记录它及其视觉效果插件Regions插件的使用方法. 1.创建实例 引入插件 import W ...

随机推荐

  1. VC维含义的个人理解

    有关于VC维可以在很多机器学习的理论中见到,它是一个重要的概念.在读<神经网络原理>的时候对一个实例不是很明白,通过这段时间观看斯坦福的机器学习公开课及相关补充材料,又参考了一些网络上的资 ...

  2. 集 降噪 美颜 虚化 增强 为一体的极速图像润色算法 附Demo程序

    在2015年8月份的时候,决心学习图像算法. 几乎把当时市面上的图像算法相关书籍都看了一遍, 资金有限,采取淘宝买二手书,长期驻留深圳图书馆的做法, 进度总是很慢,学习算法不得其法. 虽然把手上所有书 ...

  3. 使用Scrapy创建一个爬虫

    使用Scrapy创建一个爬虫 创建项目 您可以使用下面的命令来创建 Scrapy 项目: scrapy startproject 项目名称 例:scrapy startproject scrapy_p ...

  4. node.js上除了Express还有哪些好用的web开发框架

    老司机都有体会, 开发本身没有多难, 最纠结其实是最初的技术和框架选型, 本没有绝对的好坏之分, 可一旦选择了不适合于自己业务场景的框架, 将来木已成舟后开发和维护成本都很高, 等发现不合适的时候更换 ...

  5. VB.NET 打开窗体后关闭自己

    第一:要实例化打开的窗体 Dim bb As New frm_Main 第二:打开窗体 show 第三:释放自身 Finalize()   '赋值另一窗体的控件值,先实例化,再进行操作 Dim bb ...

  6. ES6-模块化

    ES6-模块化 在es6标准中,js原生支持modulele. ES6模块需要使用babel转码,这里简单解释一下什么是babel转码. babel就是将‘ES6模块化语法’转化为‘CommonJS模 ...

  7. 退出psql时,报psql_history的错

    数据库版本:Enterprisedb 9.2(postgreSQL) 错误如下所示: postgres=# exitcould not save history to file "/opt/ ...

  8. Linux下安装jdk8的详细步骤

    一.登录Linux,切换到root用户 sudo su 二.在usr目录下建立java安装目录 cd /usr mkdir java 三.下载jdk 登录网址:http://www.oracle.co ...

  9. MVC 中获取Json数据

    @{ ViewBag.Title = "json示例项目"; } @Scripts.Render("~/bundles/jquery") <h2>j ...

  10. ovs2.7 在系统重启后,再次使用时提示数据库无法连接的问题。

    问题现象如下,ovs开始安装后,对ovs的操作是正常的,但是,现在系统重启后,OVS的操作第一条命令就失败,如下: 问题解决方法: 参考  http://blog.csdn.net/xyq54/art ...