首页 > 代码库 > WinForm 进程 ,线程

WinForm 进程 ,线程

进程:一个进程,代表一个程序

线程:一个程序,有多个线程.

为什么要使用多线程操作:一个窗体,在创建的时候,默认会生成一个主线程,这个主线程会操作窗体的移动等操作,在执行需要等待时间的方法时,如果没有多线程操作,窗体是无法进行移动的,并且关闭之后,方法还会继续运行,会引起程序故障.因此使用多线程操作.[不能让主线程进行需要等待时间的操作]

技术分享

技术分享

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //关闭线程监控,防止报错
            Control.CheckForIllegalCrossThreadCalls = false;
        }

//需要对窗体设置关闭事件,当关闭窗体时,关闭所有进程,避免后台线程正在运行时,关闭窗体,造成报错

            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
           {
           //关闭线程
            td1.Abort();
            td2.Abort();
            td3.Abort();
            }

        Thread td1 = null;
        Thread td2 = null;
        Thread td3 = null;
        private void button1_Click(object sender, EventArgs e)
        {
            //实例化线程并委托
            td1 = new Thread(tt1);
            td2 = new Thread(tt2);
            td3 = new Thread(tt3);
            //设置线程为后台线程
            td1.IsBackground = true;
            td2.IsBackground = true;
            td3.IsBackground = true;
           //数组a2,操作有参无返
            string[] a2 = new string[] { "哈哈", "嘿嘿", "嘻嘻", "哼哼", "恩恩", "咦咦" };
            //开启线程
            td1.Start();
            td2.Start(a2);
            td3.Start();
        }
        public void tt1()
        {
            //死循环,循环展示数组,间隔200毫秒
            string[] a1 = new string[] { "", "", "", "", "", "" };
            while (true)
            {
                foreach (string ax1 in a1)
                {
                    label1.Text = ax1.ToString();
                    Thread.Sleep(200);
                }
            }
        }
        //默认方法是无参数,无返回值的,这里也可以传入参数,只能传入基类
        //
        public void tt2(object s)
        {
            //死循环,循环展示数组,间隔200毫秒    
            string[] a22 = s as string[];
            while (true)
            {
                foreach (string ax2 in a22)
                {
                    label2.Text = ax2.ToString();
                    Thread.Sleep(200);
                }
            }
        }
        public void tt3()
        {
            //死循环,循环展示数组,间隔200毫秒
            string[] a3 = new string[] { "可口可乐", "怡宝", "佳得乐", "脉动", "雪碧", "芬达" };
            while (true)
            {
                foreach (string ax3 in a3)
                {
                    label3.Text = ax3.ToString();
                    Thread.Sleep(200);
                }
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            //只有在按下Button1才能按Button2
            if (td1 != null && td2 != null && td3 != null)
            {
                //关闭线程
                td1.Abort();
                td2.Abort();
                td3.Abort();
            }
        }
    }
}

 

WinForm 进程 ,线程