您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

2026-03-30 14:071阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1494个文字,预计阅读时间需要6分钟。

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

csharp代代相传:csharpusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO;using System.Text;using System.Windows.Forms;using Gac;

namespace Demo{ public partial class Form1 { // 省略代码内容 }}

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

代码1:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
using Gac;namespace Demo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DownLoadFile dlf = new DownLoadFile();
private void btnTest_Click(object sender, EventArgs e)
{
//string[] lines = File.ReadAllLines("华军软件.txt");
//for (int i = 0; i < lines.Length; i++)
//{
// string[] line = lines[i].Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
// if (line.Length == 2)
// {
// string path = Uri.EscapeUriString(line[1]);
// string filename = Path.GetFileName(path);
// string dir = @"D:\test";
// ListViewItem item = listView1.Items.Add(new ListViewItem(new string[] { (listView1.Items.Count + 1).ToString(), filename, "0", "0", "0%", "0", "0", DateTime.Now.ToString(), "等待中", line[1] }));
// int id = item.Index;
// dlf.AddDown(path, dir, id, id.ToString());
// }
//}
//dlf.StartDown(); //"localhost:1829/Rource/585615db-8f36-4c25-bca1-3a4b7b9953b4.jpg",
//"localhost:1829/Rource/2287833a-eb1d-4365-b003-9b43758b78da.gif"
string[] lines = {
"localhost:1829/Rource/585615db-8f36-4c25-bca1-3a4b7b9953b4.jpg",
"localhost:1829/Rource/2287833a-eb1d-4365-b003-9b43758b78da.gif" }; for (int i = 0; i < lines.Length; i++)
{
//string[] line = lines[i].Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
//if (lines.Length == 2)
//{
string path = lines[i];
string filename = Path.GetFileName(path);
string dir = @"C:\Users\Administrator\Desktop";
ListViewItem item = listView1.Items.Add(new ListViewItem(new string[] { (listView1.Items.Count + 1).ToString(), filename, "0", "0", "0%", "0", "0", DateTime.Now.ToString(), "等待中", lines[i] }));
int id = item.Index;
dlf.AddDown(path, dir, id, filename);
//}
}
dlf.StartDown();
} private void Form1_Load(object sender, EventArgs e)
{

dlf.ThreadNum = 3;//线程数,不设置默认为3
dlf.doSendMsg += SendMsgHander;//下载过程处理事件
} private void Form1_Layout(object sender, LayoutEventArgs e)
{
throw new NotImplementedException();
} private void SendMsgHander(DownLoadMessage msg)
{
switch (msg.Tag)
{
case DownLoadStatus.Start:
this.Invoke((MethodInvoker)delegate ()
{
listView1.Items[msg.Id].SubItems[8].Text = "开始下载";
listView1.Items[msg.Id].SubItems[7].Text = DateTime.Now.ToString();
});
break;
case DownLoadStatus.GetLength:
this.Invoke((MethodInvoker)delegate ()
{
listView1.Items[msg.Id].SubItems[3].Text = msg.LengthInfo;
listView1.Items[msg.Id].SubItems[8].Text = "连接成功";
});
break;
case DownLoadStatus.End:
case DownLoadStatus.DownLoad:
this.Invoke(new MethodInvoker(() =>
{
this.Invoke((MethodInvoker)delegate ()
{
listView1.Items[msg.Id].SubItems[2].Text = msg.SizeInfo;
listView1.Items[msg.Id].SubItems[4].Text = msg.Progress.ToString() + "%";
listView1.Items[msg.Id].SubItems[5].Text = msg.SpeedInfo;
listView1.Items[msg.Id].SubItems[6].Text = msg.SurplusInfo;
if (msg.Tag == DownLoadStatus.DownLoad)
{
listView1.Items[msg.Id].SubItems[8].Text = "下载中";
}
else
{
listView1.Items[msg.Id].SubItems[8].Text = "下载完成";
}
Application.DoEvents();
});
}));
break;
case DownLoadStatus.Error:
this.Invoke((MethodInvoker)delegate ()
{
listView1.Items[msg.Id].SubItems[6].Text = "失败";
listView1.Items[msg.Id].SubItems[8].Text = msg.ErrMessage;
Application.DoEvents();
});
break;
}
}
}
}

代码2:

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;namespace Gac
{ public class DownLoadFile
{
public int ThreadNum = 3;
List<Thread> list = new List<Thread>(); public DownLoadFile()
{
doSendMsg += Change;
} private void Change(DownLoadMessage msg)
{
if (msg.Tag == DownLoadStatus.Error || msg.Tag == DownLoadStatus.End)
{
StartDown(1);
}
} public void AddDown(string downUrl, string dir, int id = 0, string fileName = "")
{
Thread tsk = new Thread(() =>
{
Download(downUrl, dir, fileName, id);
});
list.Add(tsk);
} public void StartDown(int startNum = 3)
{
for (int i2 = 0; i2 < startNum; i2++)
{
lock (list)
{
for (int i = 0; i < list.Count; i++)
{
if (list[i].ThreadState == ThreadState.Unstarted || list[i].ThreadState == ThreadState.Suspended)
{
list[i].Start();
break;
}
}
}
} }
public delegate void dlgSendMsg(DownLoadMessage msg);
public event dlgSendMsg doSendMsg;
//public event doSendMsg;
//public dlgSendMsg doSendMsg = null; private void Download(string path, string dir, string filename, int id = 0)
{
try
{
DownLoadMessage msg = new DownLoadMessage();
msg.Id = id;
msg.Tag = 0;
doSendMsg(msg);
FileDownloader loader = new FileDownloader(path, dir, filename, 4);
loader.data.Clear();
msg.Tag = DownLoadStatus.Start;
msg.Length = (int)loader.getFileSize(); ;
doSendMsg(msg);
DownloadProgressListener linstenter = new DownloadProgressListener(msg);
linstenter.doSendMsg = new DownloadProgressListener.dlgSendMsg(doSendMsg);
loader.download(linstenter);
}
catch (Exception ex)
{
DownLoadMessage msg = new DownLoadMessage();
msg.Id = id;
msg.Length = 0;
msg.Tag = DownLoadStatus.Error;
msg.ErrMessage = ex.Message;
doSendMsg(msg); Console.WriteLine(ex.Message);
}
}
}
}

代码3:

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.IO;
using System.Net;namespace Gac
{
/// <summary>
/// 多个线程分块下载一个文件
/// </summary>
public class FileDownloader
{
/// <summary>
/// 已下载文件长度
/// </summary>
private long downloadSize = 0;
/// <summary>
/// 原始文件长度
/// </summary>
private long fileSize = 0;
/// <summary>
/// 线程数
/// </summary>
private DownloadThread[] threads;
/// <summary>
/// 本地保存文件
/// </summary>
private string saveFilePath;
/// <summary>
/// 缓存各线程下载的长度
/// </summary>
public Dictionary<int, long> data = new Dictionary<int, long>(); /// <summary>
/// 分块,每条线程下载的长度,每一块的大小
/// </summary>
private long block;
/// <summary>
/// 下载路径
/// </summary>
private String downloadUrl;
/// <summary>
/// 获取线程数
/// </summary>
/// <returns> 获取线程数</returns>
public int getThreadSize()
{
return threads.Length;
}
/// <summary>
/// 获取文件大小
/// </summary>
/// <returns>获取文件大小</returns>
public long getFileSize()
{
return fileSize;
}
/// <summary>
/// 累计已下载大小
/// </summary>
/// <param name="size">累计已下载大小</param>
public void append(long size)
{
lock (this) //锁定同步
{
downloadSize += size;
} }
/// <summary>
/// 更新指定线程最后下载的位置
/// </summary>
/// <param name="threadId">threadId 线程id</param>
/// <param name="pos">最后下载的位置</param>
public void update(int threadId, long pos)
{
if (data.ContainsKey(threadId))
{
this.data[threadId] = pos;
}
else
{
this.data.Add(threadId, pos);
}
} /// <summary>
/// 构造函数,构建下载准备,获取文件大小
/// </summary>
/// <param name="downloadUrl">下载路径</param>
/// <param name="fileSaveDir"> 文件保存目录</param>
/// <param name="threadNum">下载线程数</param>
public FileDownloader(string downloadUrl, string fileSaveDir, string filename = "", int threadNum = 3)
{
try
{
//if (string.IsNullOrEmpty(filename))
//{
// filename = Uri.UnescapeDataString(Path.GetFileName(downloadUrl));//获取文件名称 uri 解码中文字符
//}
if (string.IsNullOrEmpty(filename))
{
filename = Path.GetFileName(downloadUrl);
} //构建www.1234xp.com/jianhu.html 欢迎留下您的宝贵建议】

本文共计1494个文字,预计阅读时间需要6分钟。

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

csharp代代相传:csharpusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO;using System.Text;using System.Windows.Forms;using Gac;

namespace Demo{ public partial class Form1 { // 省略代码内容 }}

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

代码1:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
using Gac;namespace Demo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DownLoadFile dlf = new DownLoadFile();
private void btnTest_Click(object sender, EventArgs e)
{
//string[] lines = File.ReadAllLines("华军软件.txt");
//for (int i = 0; i < lines.Length; i++)
//{
// string[] line = lines[i].Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
// if (line.Length == 2)
// {
// string path = Uri.EscapeUriString(line[1]);
// string filename = Path.GetFileName(path);
// string dir = @"D:\test";
// ListViewItem item = listView1.Items.Add(new ListViewItem(new string[] { (listView1.Items.Count + 1).ToString(), filename, "0", "0", "0%", "0", "0", DateTime.Now.ToString(), "等待中", line[1] }));
// int id = item.Index;
// dlf.AddDown(path, dir, id, id.ToString());
// }
//}
//dlf.StartDown(); //"localhost:1829/Rource/585615db-8f36-4c25-bca1-3a4b7b9953b4.jpg",
//"localhost:1829/Rource/2287833a-eb1d-4365-b003-9b43758b78da.gif"
string[] lines = {
"localhost:1829/Rource/585615db-8f36-4c25-bca1-3a4b7b9953b4.jpg",
"localhost:1829/Rource/2287833a-eb1d-4365-b003-9b43758b78da.gif" }; for (int i = 0; i < lines.Length; i++)
{
//string[] line = lines[i].Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
//if (lines.Length == 2)
//{
string path = lines[i];
string filename = Path.GetFileName(path);
string dir = @"C:\Users\Administrator\Desktop";
ListViewItem item = listView1.Items.Add(new ListViewItem(new string[] { (listView1.Items.Count + 1).ToString(), filename, "0", "0", "0%", "0", "0", DateTime.Now.ToString(), "等待中", lines[i] }));
int id = item.Index;
dlf.AddDown(path, dir, id, filename);
//}
}
dlf.StartDown();
} private void Form1_Load(object sender, EventArgs e)
{

dlf.ThreadNum = 3;//线程数,不设置默认为3
dlf.doSendMsg += SendMsgHander;//下载过程处理事件
} private void Form1_Layout(object sender, LayoutEventArgs e)
{
throw new NotImplementedException();
} private void SendMsgHander(DownLoadMessage msg)
{
switch (msg.Tag)
{
case DownLoadStatus.Start:
this.Invoke((MethodInvoker)delegate ()
{
listView1.Items[msg.Id].SubItems[8].Text = "开始下载";
listView1.Items[msg.Id].SubItems[7].Text = DateTime.Now.ToString();
});
break;
case DownLoadStatus.GetLength:
this.Invoke((MethodInvoker)delegate ()
{
listView1.Items[msg.Id].SubItems[3].Text = msg.LengthInfo;
listView1.Items[msg.Id].SubItems[8].Text = "连接成功";
});
break;
case DownLoadStatus.End:
case DownLoadStatus.DownLoad:
this.Invoke(new MethodInvoker(() =>
{
this.Invoke((MethodInvoker)delegate ()
{
listView1.Items[msg.Id].SubItems[2].Text = msg.SizeInfo;
listView1.Items[msg.Id].SubItems[4].Text = msg.Progress.ToString() + "%";
listView1.Items[msg.Id].SubItems[5].Text = msg.SpeedInfo;
listView1.Items[msg.Id].SubItems[6].Text = msg.SurplusInfo;
if (msg.Tag == DownLoadStatus.DownLoad)
{
listView1.Items[msg.Id].SubItems[8].Text = "下载中";
}
else
{
listView1.Items[msg.Id].SubItems[8].Text = "下载完成";
}
Application.DoEvents();
});
}));
break;
case DownLoadStatus.Error:
this.Invoke((MethodInvoker)delegate ()
{
listView1.Items[msg.Id].SubItems[6].Text = "失败";
listView1.Items[msg.Id].SubItems[8].Text = msg.ErrMessage;
Application.DoEvents();
});
break;
}
}
}
}

代码2:

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;namespace Gac
{ public class DownLoadFile
{
public int ThreadNum = 3;
List<Thread> list = new List<Thread>(); public DownLoadFile()
{
doSendMsg += Change;
} private void Change(DownLoadMessage msg)
{
if (msg.Tag == DownLoadStatus.Error || msg.Tag == DownLoadStatus.End)
{
StartDown(1);
}
} public void AddDown(string downUrl, string dir, int id = 0, string fileName = "")
{
Thread tsk = new Thread(() =>
{
Download(downUrl, dir, fileName, id);
});
list.Add(tsk);
} public void StartDown(int startNum = 3)
{
for (int i2 = 0; i2 < startNum; i2++)
{
lock (list)
{
for (int i = 0; i < list.Count; i++)
{
if (list[i].ThreadState == ThreadState.Unstarted || list[i].ThreadState == ThreadState.Suspended)
{
list[i].Start();
break;
}
}
}
} }
public delegate void dlgSendMsg(DownLoadMessage msg);
public event dlgSendMsg doSendMsg;
//public event doSendMsg;
//public dlgSendMsg doSendMsg = null; private void Download(string path, string dir, string filename, int id = 0)
{
try
{
DownLoadMessage msg = new DownLoadMessage();
msg.Id = id;
msg.Tag = 0;
doSendMsg(msg);
FileDownloader loader = new FileDownloader(path, dir, filename, 4);
loader.data.Clear();
msg.Tag = DownLoadStatus.Start;
msg.Length = (int)loader.getFileSize(); ;
doSendMsg(msg);
DownloadProgressListener linstenter = new DownloadProgressListener(msg);
linstenter.doSendMsg = new DownloadProgressListener.dlgSendMsg(doSendMsg);
loader.download(linstenter);
}
catch (Exception ex)
{
DownLoadMessage msg = new DownLoadMessage();
msg.Id = id;
msg.Length = 0;
msg.Tag = DownLoadStatus.Error;
msg.ErrMessage = ex.Message;
doSendMsg(msg); Console.WriteLine(ex.Message);
}
}
}
}

代码3:

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.IO;
using System.Net;namespace Gac
{
/// <summary>
/// 多个线程分块下载一个文件
/// </summary>
public class FileDownloader
{
/// <summary>
/// 已下载文件长度
/// </summary>
private long downloadSize = 0;
/// <summary>
/// 原始文件长度
/// </summary>
private long fileSize = 0;
/// <summary>
/// 线程数
/// </summary>
private DownloadThread[] threads;
/// <summary>
/// 本地保存文件
/// </summary>
private string saveFilePath;
/// <summary>
/// 缓存各线程下载的长度
/// </summary>
public Dictionary<int, long> data = new Dictionary<int, long>(); /// <summary>
/// 分块,每条线程下载的长度,每一块的大小
/// </summary>
private long block;
/// <summary>
/// 下载路径
/// </summary>
private String downloadUrl;
/// <summary>
/// 获取线程数
/// </summary>
/// <returns> 获取线程数</returns>
public int getThreadSize()
{
return threads.Length;
}
/// <summary>
/// 获取文件大小
/// </summary>
/// <returns>获取文件大小</returns>
public long getFileSize()
{
return fileSize;
}
/// <summary>
/// 累计已下载大小
/// </summary>
/// <param name="size">累计已下载大小</param>
public void append(long size)
{
lock (this) //锁定同步
{
downloadSize += size;
} }
/// <summary>
/// 更新指定线程最后下载的位置
/// </summary>
/// <param name="threadId">threadId 线程id</param>
/// <param name="pos">最后下载的位置</param>
public void update(int threadId, long pos)
{
if (data.ContainsKey(threadId))
{
this.data[threadId] = pos;
}
else
{
this.data.Add(threadId, pos);
}
} /// <summary>
/// 构造函数,构建下载准备,获取文件大小
/// </summary>
/// <param name="downloadUrl">下载路径</param>
/// <param name="fileSaveDir"> 文件保存目录</param>
/// <param name="threadNum">下载线程数</param>
public FileDownloader(string downloadUrl, string fileSaveDir, string filename = "", int threadNum = 3)
{
try
{
//if (string.IsNullOrEmpty(filename))
//{
// filename = Uri.UnescapeDataString(Path.GetFileName(downloadUrl));//获取文件名称 uri 解码中文字符
//}
if (string.IsNullOrEmpty(filename))
{
filename = Path.GetFileName(downloadUrl);
} //构建www.1234xp.com/jianhu.html 欢迎留下您的宝贵建议】