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)
            {
    
            }     
        }
    }

    运行截图:

  • 相关阅读:
    WPF中调用资源字典的方法
    DataGridView控制单元格修改的输入规则
    将dataGridView数据转成DataTable
    窗体打开后设置某个控件为默认的焦点
    自定义控件属性英文类别
    VMWare虚拟机与主机建立共享文件夹
    与.Net大师Jeffrey Richter面对面交流——TUP对话大师系列活动回顾(多图配详细文字)
    一个编程小题目引发的思考(下)
    一个Quicksort究竟可以写到多么短
    我是如何设计并实现一门程序设计语言——一门函数式编程语言Lucida的诞生
  • 原文地址:https://www.cnblogs.com/the-three/p/3774493.html
Copyright © 2011-2022 走看看