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五天乐(第三天)ListFragment与ViewPager
    Thinking in States
    红黑树上的连接操作
    [LeetCode][Java] Binary Tree Level Order Traversal
    使用IR2101半桥驱动电机的案例
    HDU 4782 Beautiful Soup(模拟)
    C语言之基本算法38—格式化输出10000以内的全部完数
    远在美国的凤姐为何选择回国理財?
    2014-7-20 谁还认得这几本书?
    360在线笔试---反思两道题
  • 原文地址:https://www.cnblogs.com/Mysterious/p/3429206.html
Copyright © 2011-2022 走看看