使用C#制作Windows窗体应用,实现一个微端下载器功能(多线程/断点续传/微端/下载器)

58 篇文章 10 订阅

一、前言

PC端的QQ游戏大厅下载游戏的时候,我们会发现很多游戏都自己做了微端下载器,就是在先下载一个1~2M的下载器,然后再通过这个下载器去下载游戏。
那么,微端下载器用什么来制作呢?可以有很多制作方案。
本文我教你通过C#制作Windows窗体应用来实现微端下载器功能。

二、最终运行效果

如下, 最终运行效果
在这里插入图片描述
我把窗口的标题栏隐藏了,因为默认的标题栏不是很好看,如果想显示标题栏,只需将工程中的Form1.cs中下面这行代码注释掉即可。
在这里插入图片描述
发布出来的Release版本只有555KB,相对于一两百兆的游戏来说微端可以秒触达用户。
在这里插入图片描述

三、Demo工程下载

Demo工程我已上传到CODE CHINA,感兴趣的同学可以下载下来学习。
Demo工程下载地址:https://codechina.csdn.net/linxinfa/winform-download-demo
在这里插入图片描述

四、工程类型

如果你是自己制作,创建工程的时候,选择C# - Winodows - 桌面,创建Windows 窗体应用(.NET Framework)
在这里插入图片描述

五、工程结构

工程结构非常简单,如下
在这里插入图片描述
Program.cs是程序入口,Form1.cs是主窗口,DownloadThread.cs是下载逻辑。
注意,Form1.Designer.cs是可视化界面自动生成出来的代码。
在这里插入图片描述

六、多线程下载核心代码

多线程下载核心代码如下,具体代码可以Demo工程进行学习。
注:Demo中我下载完后执行了zip解压,所以用到了一个第三方库Ionic.Zip.Unity.dll,如果你不不需要解压,可以去掉这个dll和对应的逻辑。

using System;
using System.IO;
using System.Net;

namespace winform1
{
    class DownloadThread
    {
        /// <summary>
        /// 线程开始事件
        /// </summary>
        public event EventHandler threadStartEvent;
        /// <summary>
        /// 线程执行时事件
        /// </summary>
        public event EventHandler threadEvent;
        /// <summary>
        /// 线程结束事件
        /// </summary>
        public event EventHandler threadEndEvent;

        /// <summary>        
        /// c#,.net 下载文件        
        /// </summary>        
        /// <param name="url">下载文件地址</param>       
        /// <param name="filename">下载后的存放地址</param>     
        public void RunMethod(string url, string filename)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                //通知主界面,我开始了, response.ContentLength用来设置进度条的最大值
                threadStartEvent.Invoke(response.ContentLength, null);

                Stream st = response.GetResponseStream();
                Stream so = new FileStream(filename, FileMode.Create);
                long totalDownloadedByte = 0;
                byte[] by = new byte[1024];
                int osize = st.Read(by, 0, by.Length);
                while (osize > 0)
                {
                    totalDownloadedByte += osize;
                    so.Write(by, 0, osize);
                    osize = st.Read(by, 0, by.Length);

                    //通知主界面我正在执行,totalDownloadedByte表示进度条当前进度
                    threadEvent.Invoke(totalDownloadedByte, null);
                }
                so.Close();
                st.Close();

                //通知主界面我已经完成了
                threadEndEvent.Invoke(null, null);
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个简单的图书管理系统的教程,使用 C#Windows 窗体应用程序。 首先,我们需要创建一个新的 Windows 窗体应用程序项目。我们可以在 Visual Studio 中选择 “新建项目” -> “Windows 窗体应用程序” 来创建这个项目。 接下来,我们需要设计我们的用户界面。我们可以在 Visual Studio 的 “工具箱” 中找到各种控件,如标签、文本框、按钮等。我们可以使用这些控件来创建一个简单的界面,以便用户可以输入、查看和编辑图书信息。 例如,我们可以使用以下控件: - 一个标签,用于显示 “图书管理系统” 的标题。 - 一个文本框,用于输入图书的名称。 - 一个下拉列表框,用于选择图书的类型。 - 一个文本框,用于输入图书的作者。 - 一个文本框,用于输入图书的出版社。 - 一个日期选择,用于选择图书的出版日期。 - 一个按钮,用于添加图书信息。 - 一个按钮,用于编辑图书信息。 - 一个按钮,用于删除图书信息。 - 一个列表框,用于显示所有的图书信息。 我们可以使用 Visual Studio 的设计来创建这个用户界面。我们可以在设计中拖拽控件到窗体中,然后设置它们的属性来达到我们想要的效果。 接下来,我们需要编写代码来处理用户界面的交互和数据存储。我们可以使用 C# 编写代码,并使用 .NET 框架提供的类库来实现这些功能。 例如,我们可以创建一个名为 Book 的类来表示一本书,其中包含图书的名称、类型、作者、出版社和出版日期等信息。我们可以使用一个 List<Book> 类型的变量来保存所有的图书信息。 我们可以在添加图书、编辑图书和删除图书的按钮的单击事件中编写代码,来实现相应的功能。例如,当用户单击添加图书按钮时,我们可以从文本框和下拉列表框中读取图书的信息,并创建一个新的 Book 对象,并将它添加到我们的图书列表中。 我们还可以在窗体加载时,从文件或数据库中读取已有的图书信息,并将它们显示在列表框中。 最后,我们需要将我们的代码编译成可执行文件,并将它们部署到用户的计算机上。 这是一个非常简单的图书管理系统的实现方法。当然,它还有很多可以改进的地方,例如添加搜索和排序功能实现用户登录和权限管理、优化用户界面等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林新发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值