zoukankan      html  css  js  c++  java
  • 多线程初探

    一.定义

        线程是操作系统可以调度的最小单位,线程被包含在进程中,是进程中实际运作的最小单位。一个进程可以只有一个线程,也可以有多个线程。

    二.为什么要使用线程?

        1.优化程序响应,提升用户体验,使用线程可以防止应用程序假死

        2.充分使用CPU资源

    三.线程的简单使用

        线程用来执行进程分配的子任务,该子任务在程序中就体现在执行某一个方法。那么,线程怎么知道执行哪一个方法呢?事实上线程不知道执行哪个方法,因此线程类(Thread)中使用了委托,以达到让线程执行某个方法的目的,线程具体使用步骤如下:

        1.命名空间:using System.Threading;

        2.创建线程需要调用的方法:method

        3.创建线程:Thread thd=new Thread(method);//Thread类提供了名为ThreadStart的委托,public delegate void ThreadStart();。

        4.设置线程状态:thd.Start();

    四.实例:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;
    
    namespace 多线程
    {
        public partial class ThreadFrm : Form
        {
            public ThreadFrm()
            {
                InitializeComponent();
                //强制CLR以安全方式执行线程
                TextBox.CheckForIllegalCrossThreadCalls = true;
                //实例化委托
                countDelegate = new CountDelegate(ShowNum); 
            }
    
            private void btnCount_Click(object sender, EventArgs e)
            {
                thread = new Thread(Count);
                thread.Start();
            }
    
            //声明委托用于以安全方式与UI线程进行通信
            public delegate void CountDelegate(string message);
            //定义委托对象,在构造函数中实例化
            CountDelegate countDelegate = null;
            Thread thread = null;
            /// <summary>
            /// 执行计算
            /// </summary>
            private void Count()
            { 
                for (int i = 1; i < 9999; i++)
                {
                    //重点,使用Control类的Invoke方法回调方法
                    this.Invoke(countDelegate,i.ToString());
                }
    
                MessageBox.Show("计算完毕!");
            }
    
            /// <summary>
            /// 为UI线程中的TextBox赋值
            /// </summary>
            /// <param name="message"></param>
            private void ShowNum(string message)
            {
                ShowNumTxt.Text = message;
            }
    
            private void ThreadFrm_FormClosing(object sender, FormClosingEventArgs e)
            {
    
            }     
        }
    }

    运行截图:

  • 相关阅读:
    JavaScript 金字塔
    最短路径—Dijkstra算法和Floyd算法
    Qt编程的一些技巧
    Qt-Creator 加入qwt库
    关于usr/bin/ld: cannot find -lxxx问题总结(Qt编译错误cannot find -lGL)
    根文件系统制作、NFS配置与安装及利用NFS挂载根文件系统
    tslib1.4与Qt4.8.6的交叉编译与移植
    用树莓派做3G无线路由器
    python学习笔记6:面向对象
    pyhton学习笔记5:常用模块:datatime,random,json,re
  • 原文地址:https://www.cnblogs.com/the-three/p/3774493.html
Copyright © 2011-2022 走看看