C# 多线程 简单使用方法以及常用参数

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading; //线程操作的类在这个命名空间下.

namespace C02多线程
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //关闭控件的跨线程访问检查
            TextBox.CheckForIllegalCrossThreadCalls = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int sum = 0;
            for (int i = 0; i < 999999999; i++)
            {
                sum += i;
            }

            MessageBox.Show("ok");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //创建1个线程对象 并为这个线程对象指定要执行的方法.
            Thread thread = new Thread(TestThread);
            //设置线程为后台线程.
            thread.IsBackground = true;
            //开启线程
            thread.Start();

            //线程默认情况下都是前台线程.
            //要所有的前台线程退出以后 程序才会退出.
            //后台线程 只要所有的前台线程结束 后台线程就会立即结束.
            //进程里默认的线程我们叫做主线程或者叫做UI线程.
            //线程什么时候结束 该线程执行的方法执行完以后  线程就自动退出.

            //多个线程访问同一资源  可能造成不同步的情况. 这个叫做 线程重入.
            //th.Abort(); 强行停止线程.
            //Thread.Sleep(1000);//将当前线程暂停 单位毫秒
            //Thread.CurrentThread;得到当前线程的引用

            //线程调用带参数的方法
            //创建1个ParameterizedThreadStart委托对象.为这个委托对象绑定方法.
            //将委托对象通过构造函数传入线程对象
            //启动线程的时候调用Start()的重载 将参数传入.
        }

        //准备让线程去调用.
        private void TestThread()
        {
            int sum = 0;
            for (int i = 0; i < 999999999; i++)
            {
                sum += i;
            }
            MessageBox.Show("ok");
        }

        private void CountNunm()
        {
            //使用lock加锁  请联想你上厕所的情况
            lock (this)
            {
                for (int i = 0; i < 10000; i++)
                {
                    int num = int.Parse(textBox1.Text.Trim());
                    num++;
                    //Thread.Sleep(500);//将当前线程暂停
                   // Thread.CurrentThread.Abort();
                    //Thread th = Thread.CurrentThread;
                    //th.Abort();
                    //if (num == 5000)
                    //{
                    //    th.Abort();
                    //}
                    textBox1.Text = num.ToString();
                }
            }
        }
        Thread th;
        private void button3_Click(object sender, EventArgs e)
        {
            th = new Thread(CountNunm);
            th.Name = "哈哈线程";
            th.IsBackground = true;

            th.Start();

            //Thread th1 = new Thread(CountNunm);
            //th1.IsBackground = true;
            //th1.Start();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            //ThreadStart s = new ThreadStart(CountNunm);
            //Thread th = new Thread(CountNunm);
            ParameterizedThreadStart s = new ParameterizedThreadStart(TestThreadParsms);
            Thread t = new Thread(s);
            t.IsBackground = true;
            t.Start("你好啊");
        }

        private void TestThreadParsms(object obj)
        {
            Console.WriteLine(obj.ToString());
        }

    }
}
时间: 2024-08-27 21:17:40

C# 多线程 简单使用方法以及常用参数的相关文章

PHP命令行执行程序php.exe使用及常用参数

PHP命令行执行程序php.exe参数说明 -f <file>:以命令行方式运行指定的PHP文件,只要指定具体的PHP文件(带绝对路径),php.exe就可以执行PHP文件,所以这个参数单个使用其实有没有都无所谓,他有点类似于在游览器方式下显示PHP执行的结果,区别在于由于是以命令行方式运行,它是以HTML源码的形式输出,如果执行有错误,也会列出出错信息. 使用方法 c:\php\php -f <file> 或 c:\php\php <file> -F <file

C# 使用多线程如何传递两个以上参数的实现方法(附示例)

某些情况下当我们启动一个线程的时候会向该线程传递参数,有时除了功能上需要之外,我觉得还有就是为了我们能管理好启动的线程组(当然,只开一两个线程什么的也谈不上不好管理了,我说的线程组是指10+的线程,我们很难去主动控制的). 因为刚接触C#,所以还没有在C#下用过多线程去实现某些功能.通过学习我发现单纯的去启动线程很容易,反而是想要往线程中传一些参数变得有点说道了,这里我想说传入参数的数量为>=2.不过我们还是一步一步的来,带大家过一遍C#下的多线程怎么搞. 以上一篇讲的网络通信的例子,把整个过程

arm-linux-gcc 常用参数讲解 gcc编译器使用方法

我们需要编译出运行在ARM平台上的代码,所使用的交叉编译器为 arm-linux-gcc.下面将arm-linux-gcc编译工具的一些常用命令参数介绍给大家. 在此之前首先介绍下编译器的工作过程,在使用GCC编译程序时,编译过程分为四个阶段: 1. 预处理(Pre-Processing) 2. 编译(Compiling) 3. 汇编(Assembling) 4. 链接(Linking) Linux程序员可以根据自己的需要让 GCC在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或

jQuery 的选择器可谓之强大无比,这里简单地总结一下常用的元素查找方法

1 jQuery 的选择器可谓之强大无比,这里简单地总结一下常用的元素查找方法 2 3 $("#myELement") 选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素 4 $("div") 选择所有的div标签元素,返回div元素数组 5 $(".myClass") 选择使用myClass类的css的所有元素 6 $("*") 选择文档中的所有的元素,可

Bootstrap modal常用参数、方法和事件

Bootstrap modal(模态窗)常用参数.方法和事件: 参数: 名称 类型 默认值 描述 Backdrop Boolean或字符串"static" True True:有背景,点击modal外部,modal消失. False:无背景,点击modal外部,modal不消失. Static:有背景,点击modal外部,modal不消失. Keyboard Boolean True True:键盘上的esc按下关闭modal False:键盘上的esc按下不关闭modal Show

JVM 常用参数

转自百度空间,原文连接失效,内容来自百度快照 常见配置举例 堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制.32位系统 下,一般限制在1.5G~2G;64为操作系统对内存无限制.我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m. 典型设置: java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -Xmx3

深入理解JVM虚拟机10:JVM常用参数以及调优实践

微信公众号[Java技术江湖]一位阿里 Java 工程师的技术小站.作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux.网络.多线程,偶尔讲点Docker.ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!(关注公众号后回复”Java“即可领取 Java基础.进阶.项目和架构师等免费学习资料,更有数据库.分布式.微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送作者原创的Java学习指南.Java程序员面试指

maven用途、核心概念、用法、常用参数和命令、扩展

http://trinea.iteye.com/blog/1290898 本文由浅入深,主要介绍maven的用途.核心概念(Pom.Repositories.Artifact.Build Lifecycle.Goal)介绍.用法(Archetype意义及创建各种项目).maven常用参数和命令以及简单故障排除.maven扩展(eclipse.cobertura.findbugs.插件开发).maven配置. 本文较长,可根据个人需要有选择性的查看,比如先看用法再回过头来看核心概念 1.maven

Win32 多线程的创建方法,区别和联系

Win32多线程的创建方法主要有: CreateThread() _beginthread()&&_beginthreadex() AfxBeginThread() CWinThread类 一.简介 CreateThread: Win32提供的创建线程的最基础的API,用于在主线程上创建一个线程.返回一个HANDLE句柄(内核对象).在内核对象使用完毕后,一般需要关闭,使用CloseHandle()函数. _beginthread()&&_beginthreadex():_