zoukankan      html  css  js  c++  java
  • C#线程使用学习

    线程的入口函数可以不带输入参数,也可以带输入参数:

    form1.cs

    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 ThreadFormTest
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < 100; i++)
                {
                    lbl_state.Text = i.ToString();
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                //调用TaskList类的实例成员方法DoTaskB
                TaskList task = new TaskList();
                Thread t1 = new Thread(task.DoTaskB);
                t1.Start();
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
                Thread t1 = new Thread(TaskList.DoTaskA);
                t1.Start();
            }
    
            private void button4_Click(object sender, EventArgs e)
            {
                TaskList task = new TaskList();
                Thread t1 = new Thread(task.StcDoTaskB);
                t1.Start("实例方法");
            }
    
            private void button5_Click(object sender, EventArgs e)
            {
                Thread t1 = new Thread(TaskList.StcDoTaskA);
                t1.Start("静态方法");
            }
    
        }
    }

    TaskList.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System.Windows.Forms;
    
    namespace ThreadFormTest
    {
        public class TaskList
        {
            public void DoTaskB()
            {
                MessageBox.Show("我是实例成员方法");
            }
    
            public static void DoTaskA()
            {
                MessageBox.Show("我是静态成员方法");
            }
    
            public void StcDoTaskB(object date)
            {
                MessageBox.Show(date.ToString());
            }
    
            public static void StcDoTaskA(object date)
            {
                MessageBox.Show(date.ToString());
            }
        }
    }

    form1界面设计

    1 

    线程的挂起与恢复

    Thread名字.Suspend();

    Thread名字.Resume();

    终止进程

    Thread名字.Abort();

    Thread名字.Join();

    后台线程

    前台线程和后台线程的区别在于,后台线程会随着主线程的结束而结束,而前台线程,应用程序要等待前台线程结束应用程序才能结束。当给IsBackground属性赋值true时就指明了你建立的是后台进程,如果你建立线程时不指明类型,呢么默认是前台进程。

    线程的优先级

    ThreadPriority枚举:

    Highest、AboveNormal、BelowNormal、Lowest

    并发问题

    不同的线程在相同的时间要求被执行。他们之间对资源就会产生并发

    锁与死锁

    锁:用lock语句锁定在线程中共享的变量,另一个线程就必须等待倍锁定的解除

    死锁:在死锁中,至少有两个线程倍挂起,等待对方解锁。由于两个线程都在等待对方,就出现了死锁,线程将无限等待下去。

    lock(expression)//锁定expression,不被其他线程修改到

    {

    statement_block

    }

  • 相关阅读:
    基于tensorflow的简单线性回归模型
    msm8909平台JEITA配置和bat-V therm表合入
    开始点滴积累
    消息队列中间件(一)介绍
    Ubuntu18 的超详细常用软件安装
    IO通信模型(三)多路复用IO
    IO通信模型(二)同步非阻塞模式NIO(NonBlocking IO)
    IO通信模型(一)同步阻塞模式BIO(Blocking IO)
    Web笔记(二)Tomcat 使用总结
    const in C/C++
  • 原文地址:https://www.cnblogs.com/Mysterious/p/3429206.html
Copyright © 2011-2022 走看看