实例介绍
【实例简介】
双击打开FastDownload文件夹,选中FastDownload.sln文件,双击打开,单击工具栏中的“启动”按钮,运行程序即可。在主窗体中单击“新建”图标按钮,弹出新建下载任务窗体。新建下载任务窗体主要用来向闪电下载器主窗体中添加新的下载任务,该窗体中,输入下载网络资源的地址,手动选择文件存储路径,然后选择下载网络资源所使用的线程的数量,最后单击“立即下载”按钮,即可向主窗体添加新的下载任务。
FastDownload\FastDownload\bin\Debug\FastDownload.exe
【实例截图】
【核心代码】
private void BeginDisplay()
{
//字符串集合1,用于对listview1控件中数据项进行对比
List<string[]> ls1 = new List<string[]>();
//字符串集合2,用于对listview1控件中数据项进行对比
List<string[]> ls2 = new List<string[]>();
//使用While循环,重复检查下载或续传文件的状态
while (true)
{
//检测是否有异常
try
{
if (dl.Count > 0) //如果下载队列中有数据则向下执行
{
//下载队列和续传队列的数量的和
for (int j = 0; j < dl.Count jc.Count; j )
{
//在窗体主线程中listview1控件中添加新的空数据项
this.Invoke(
(MethodInvoker)delegate ()
{
if (lv_state.Items.Count < dl.Count jc.Count)
{
lv_state.Items.Add(new ListViewItem(
new string[]
{string.Empty,string.Empty,string.Empty,string.Empty ,
string.Empty,string.Empty,string.Empty}));
}
});
}
for (int i = 0; i < dl.Count; i ) //遍历下载列表
{
//检查下载列表中每一个下载进程的状态,如果为true继续执行
if (dl[i].state == true)
{
//如果下载列表中的下载进程的状态为:已经完成
if (dl[i].complete)
{
if (Set.Play == "1") //自动播放声音
{
SoundPlayer player = new SoundPlayer("msg.wav");
player.Play();
}
if (Set.SNotify == "1") //下载完成显示提示
{
MessageBox.Show("任务下载完成!");
}
//将已经完成的下载进程从下载队列中删除
dl.RemoveAt(i);
//将已经完成的下载进程从listview1控件中删除
this.Invoke(
(MethodInvoker)delegate ()
{
lv_state.Items.RemoveAt(i);
});
ls1.Clear(); //清空字符串集合1
ls2.Clear(); //清空字符串集合2
break; //跳出此次循环
}
//进入主窗体线程,开始对listview1控件进行操作
this.Invoke(
(MethodInvoker)delegate ()
{
if (ls1.Count < dl.Count) //添加新的空数据项
{
ls1.Add(
new string[]
{string.Empty,string.Empty,string.Empty,string.Empty ,
string.Empty,string.Empty,string.Empty});
}
ls1[i] = (dl[i].showmessage());//得到新的下载状态信息
if (ls2.Count < ls1.Count) //添加新的空数据项
{
ls2.Add(
new string[]
{string.Empty,string.Empty,string.Empty,string.Empty ,
string.Empty,string.Empty,string.Empty});
}
//只更新新的数据项,不会造成listview1控件的闪烁
for (int j = 0; j < 7; j )
{
if (ls1[i][j] != ls2[i][j])
{
ls2[i][j] = ls1[i][j];
ListViewItem lvi = lv_state.Items[i];
lvi.SubItems[j] = new
ListViewItem.ListViewSubItem(lvi, ls1[i][j]);
}
}
});
}
else
{
dl[i].state = true; //将下载进程的状态设置为true
dl[i].StartLoad(); //执行下载进程中的开始下载的方法
}
}
}
//续传
//如果续传队列中有数据,则向下执行
if (jc.Count > 0)
{
//下载队列和续传队列的数量的和
for (int j = 0; j < jc.Count dl.Count; j )
{
//在窗体主线程中listview1控件中添加新的空数据项
this.Invoke(
(MethodInvoker)delegate ()
{
if (lv_state.Items.Count < jc.Count dl.Count)
{
lv_state.Items.Add(new ListViewItem(
new string[]
{string.Empty,string.Empty,string.Empty,string.Empty ,
string.Empty,string.Empty,string.Empty}));
}
});
}
//遍历续传队列
for (int i = 0; i < jc.Count; i )
{
//如果续传队列中的进程的状态为true,则向下执行
if (jc[i].state == true)
{
//如果续传列表中的续传进程的状态为:已经完成
if (jc[i].complete)
{
if (Set.Play == "1") //自动播放声音
{
SoundPlayer player = new SoundPlayer("msg.wav");
player.Play();
}
if (Set.SNotify == "1") //下载完成显示提示
{
MessageBox.Show("任务下载完成!");
}
//将已经完成的续传进程从续传队列中删除
jc.RemoveAt(i);
//将已经完成的下续传程从listview1控件中删除
this.Invoke(
(MethodInvoker)delegate ()
{
lv_state.Items.RemoveAt(i);
});
ls1.Clear(); //清空字符串集合1
ls2.Clear(); //清空字符串集合2
break;
}
//进入主窗体线程,开始对listview1控件进行操作
this.Invoke(
(MethodInvoker)delegate ()
{
try
{
//添加新的空数据项
if (ls1.Count < jc.Count dl.Count)
{
ls1.Add(
new string[]
{string.Empty,string.Empty,string.Empty,string.Empty,
string.Empty,string.Empty,string.Empty});
}
//得到新的续传状态信息
ls1[dl.Count i] = (jc[i].showmessage());
//添加新的空数据项
if (ls2.Count < ls1.Count dl.Count)
{
ls2.Add(
new string[]
{string.Empty,string.Empty,string.Empty,string.Empty ,
string.Empty,string.Empty,string.Empty});
}
//只更新新的数据项,不会造成listview1控件的闪烁
for (int j = 0; j < 7; j )
{
if (ls1[i dl.Count][j] != ls2[i dl.Count][j])
{
ls2[i dl.Count][j] = ls1[i dl.Count][j];
ListViewItem lvi = lv_state.Items[i dl.Count];
lvi.SubItems[j] = new
ListViewItem.ListViewSubItem(lvi, ls1[i dl.Count][j]);
}
}
}
catch (Exception ex)
{
writelog(ex.Message); //将出现的异常写入日志文件
}
});
}
else
{
jc[i].state = true; //将续传进程的状态设置为true
}
}
}
}
catch (WebException ex)
{
//将出现的异常写入日志文件
if (ex.Message == "未能找到文件下载服务器或下载文件,请输入正确下载地址!")
{
writelog(ex.Message);
if (dl.Count > 0)
dl.RemoveAt(dl.Count - 1);
MessageBox.Show(ex.Message, "出错!");
}
}
catch (Exception ex2)
{
writelog(ex2.Message); //将出现的异常写入日志文件
if (dl.Count > 0)
dl.RemoveAt(dl.Count - 1);
MessageBox.Show(ex2.Message, "出错!");
}
System.Threading.Thread.Sleep(1000); //每隔1秒种重复检查一次
}
}
标签: 闪电下载器
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论