一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。
当启动一个可执行程序时,将创建一个主线程,在默认情况下,C#程序具有一个线程,就是Main方法开始和结束的代码。Main直接或间接执行的每一个命令都由默认线程(主线程)执行,当Main返回时此线程也将终止。
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
一个进程可以创建一个或多个线程以执行与该线程关联的部分程序代码。在C#中线程是使用Thread类处理的,该类在System.Threading命名空间中。创建Thread对象时,将创建新的托管线程。Thread类接收一个ThreadStart委托或ParameterizedThreadStart委托的构造函数,该委托包装了调用Start方法时由新线程调用的方法。
Thread thread = new Thread(new ThreadStart(method));//创建线程
<span style="white-space:pre"> </span>thread.Start();//启动线程
Thread thread = new Thread(new ParameterizedThreadStart(method));//创建线程
thread.Start();//启动线程
用线程实现“文字抄写员”
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.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1_SingTread
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;//允许跨线程调用
}
private void button1_Click(object sender, EventArgs e)
{
//ThreadStart doTask = new ThreadStart(DoTask);
//Thread tskThread = new Thread(doTask);
Thread tskThread = new Thread(new ThreadStart(DoTask));
tskThread.Start();
}
private void DoTask()
{
if (checkBox1.Checked == true)
{
groupBox1.Text = "运行中。。。";
groupBox1.Refresh();
textBox1.Clear();
textBox1.Refresh();
//调用方法向文本1写入文字
this.writeTextBox1();
groupBox1.Text = "任务1";
textBox3.Focus();
textBox3.SelectAll();
}
if (checkBox2.Checked == true)
{
groupBox1.Refresh();
groupBox2.Text = "运行中。。。";
groupBox2.Refresh();
textBox2.Clear();
textBox2.Refresh();
//调用方法向文本2中写入文字
this.writeTextBox2();
groupBox2.Text = "任务2";
textBox3.Focus();
textBox3.SelectAll();
}
}
//写入文本1的方法
private void writeTextBox1()
{
string strdata = textBox3.Text;
for (int i = 0; i < strdata.Length; i++)
{
textBox1.AppendText(strdata[i] + "\r");
DateTime now = DateTime.Now;
while (now.AddSeconds(1) > DateTime.Now) { }
}
}
//写入文本2的方法
private void writeTextBox2()
{
string strdata = textBox3.Text;
for (int i = 0; i < strdata.Length; i++)
{
textBox2.AppendText(strdata[i] + "\r");
DateTime now = DateTime.Now;
while (now.AddSeconds(1) > DateTime.Now) { }
}
}
}
}