zoukankan      html  css  js  c++  java
  • C#多线程网络编程应用

    编程不能死记硬背,要靠多实践操作

        如今的网络越来越发达,分享一个文件是如此的简单。特别是有了电驴、迅雷这样的下载软件就更加如虎添翼了,想从网上下载一个几个G大小的文件,真是不费吹灰之力。好,废话太多了,直接进入咱们今天的主题吧。

       要实现像迅雷一样的多线程下载,核心问题是要将多线程的概念以及怎么实现的问题弄清。

       当然,本文技术含量很低,大牛请直接绕道。

       多线程是相对单线程来说的,具体可以参考百度百科里的解释:http://baike.baidu.com/view/65706.htm

      每个程序运行都有一个最基本的主线程,用于处理界面绘画,人机交互,后台处理等过程,因此如果是在单线程程序里操作打量耗时的动作,主界面就会很卡,甚至是无法工作。因此不管您是不是喜欢,最好都别用主线程把一切事务包揽,否则很难给用户一个舒爽的客户体验。

      那么在C#里如何实现多线程呢?

    下面让我们实现一个最简单的多线程实例;

    为了演示方便,我们新建一个winform项目,取名为 MultiThreadDemo。

    先创建一个足够让你的程序卡住不动的方法函数:

        private void Display()
            {
             while (true)
              textBox1.Text = new Random().NextDouble().ToString();
            }

    然后给button1添加调用,发现确实够卡吧,谁让你把那种死循环的事情交给主线程去做呢,一个人又画图,又要算数,哪还有时间给你答复。

    using System.Threading;

     接着补充一下button1里面的代码,给他创建一个线程,我们把这线程取名叫“UiThread”用于专门处理显示吧。

    View Code

    如果你急着运行,肯定会回过头来骂我了,怎么不行呢,是不是什么会提示:“线程间操作无效: 从不是创建控件“textBox1”的线程访问它。”。因为主线程和你创建的那个线程是两个互不相干的线程,两个陌生人怎么打交道?也就是当你这个UiThread没经过主线程同意就去调用textBox1,别人会让你那么做吗?
    因此,为了处理他俩工作不协调的问题,特意强制性取消线程警告.在构造函数里添加一句:

     public Form1()
            {
                InitializeComponent();
                Control.CheckForIllegalCrossThreadCalls = false;//加上这句就不会警告了
            }

    这样一个简单的多线程程序就诞生了。不过有个时候有很多代码需要用到委托,又不想单独创建一个函数,就可以这样做:

    View Code

    不过并不推荐这么做,这在线程上是不安全的,有很大的概率会使程序奔溃。
    通过上面的练习,我们知道创建一个线程可以多做一些事,同样,我们多创建几个线程,做的事岂不是更多?这是必须的。

    接下来正式走进我们今天的正题:多线程采集

    要想多线程采集,首先要解决单个下载。

    using System.Net;
    using System.IO;
    View Code

    然后在在button2里调用

    View Code

    这样以来单次采集就完成了。
    要想像火车头一样采集,自然以目前的水平是做不到的。起码也要把批量采集做出来。无外乎使用多线程。

    View Code

    多线程采集就完成了。其实本文讲来讲去主要是围绕创建线程这一话题,技术含量相当低,就当给刚入门的朋友练练手吧!

    教程每天都会更新,欢迎继续关注。

    本文属于原创文章,转载请保持http://www.cnblogs.com/uu102的链接 如果违法上述规定,本人将保留追究转载者的权利.谢谢合作
  • 相关阅读:
    CodeForces 785D Anton and School
    CodeForces 785C Anton and Fairy Tale
    CodeForces 785B Anton and Classes
    CodeForces 785A Anton and Polyhedrons
    爱奇艺全国高校算法大赛初赛C
    爱奇艺全国高校算法大赛初赛B
    爱奇艺全国高校算法大赛初赛A
    EOJ 3265 七巧板
    EOJ 3256 拼音魔法
    EOJ 3262 黑心啤酒厂
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2697580.html
Copyright © 2011-2022 走看看