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

    }

  • 相关阅读:
    Android 屏幕适配问题分析
    Android应用程序结构
    国内市场各品牌手机后门介绍
    获取Android设备WIFI的MAC地址 “MAC地址”
    Android 如何判断指定服务是否在运行中 “Service”
    Android强制关闭某个指定应用 “关闭应用”
    如何在Android中的Activity启动第三方应用程序?
    js事件(十二)
    js文本对象模型[DOM]【续】(Node节点类型)
    js文本对象模型【DOM】(十一)
  • 原文地址:https://www.cnblogs.com/Mysterious/p/3429206.html
Copyright © 2011-2022 走看看