//定义委托 ; 参数为方法名称
public delegate void UpdateLabel(string label);
//control.invoke(参数delegate)方法:在拥有此控件的基础窗口句柄的线程上执行指定的委托。
//timeElapsedInstring 是UpdateUI方法的参数。
//lblStopWatch.Invoke(new UpdateLabel(UpdateUI), timeElapsedInstring);
public bool IsCancelled { get; set; }
public Form1()
{
InitializeComponent();
}
private void UpdateUI(string labelText)
{
lblStopWatch.Text = labelText;
}
private void btnStart_Click(object sender, EventArgs e)
{
DateTime startTime = DateTime.Now;
IsCancelled = false;
Thread t = new Thread(() =>
{
while (IsCancelled == false) //当IsCancelled 等于 false时 执行
{
Thread.Sleep(1000);
string timeElapsedInstring = (DateTime.Now - startTime).ToString(@"hh\:mm\:ss");
//lblStopWatch 是lable控件
lblStopWatch.Invoke(new UpdateLabel(UpdateUI), timeElapsedInstring);
}
});
t.Start();
}
private void btnStop_Click(object sender, EventArgs e)
{
IsCancelled = true;
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace PlainOldThread
{
class Program
{
static void Main(string[] args)
{
SimpleThreadExample st = new SimpleThreadExample();
st.StartMultipleThread(); //调用对象下的方法
for (int i = 0; i < 100; i++) //主线程 每秒输出一行 111111111
{
Thread.Sleep(1000);
Console.WriteLine("我是主线程0.0000000000000000000");
Console.WriteLine();
}
Console.ReadLine();
}
}
public class SimpleThreadExample
{
/*
Start():启动线程;
Sleep(int):静态方法,暂停当前线程指定的毫秒数;
Abort():通常使用该方法来终止一个线程;
Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复;
Resume():恢复被Suspend()方法挂起的线程的执行;
*/
bool lk = true;
public void StartMultipleThread()
{
DateTime startTime = DateTime.Now;
Thread t1 = new Thread(() =>
{
while (true)
{
if (lk)
{
Thread.Sleep(20); //每1秒执行1次
Console.WriteLine("我是线程1.111111111111111111");
}
}
});
Thread t2 = new Thread(() =>
{
while (true)
{
if (lk)
{
Thread.Sleep(20); //每1秒执行1次
Console.WriteLine("我是线程2.22222222222222222");
}
}
});
//parameterized thread //是参数
Thread t3 = new Thread(p =>
{
//var t = p.ToString();
while (true)
{
if (lk)
{
Thread.Sleep(20); //每1秒执行1次
Console.WriteLine("我是线程3.333333333333333333");
}
}
});
Thread t4 = new Thread(p =>
{
//var t = p.ToString();
while (true)
{
//让3个线程都暂停
Thread.Sleep(20); //暂停1s 后再执行
if (lk)
{
lk = false;
Thread.Sleep(10); //暂停1s 后再执行
Console.WriteLine("");
lk = true;
}
}
});
Thread t5 = new Thread(() =>
{
while (true)
{
if (lk)
{
Thread.Sleep(20); //每1秒执行1次
Console.WriteLine("我是线程5.5555555555555555555555");
}
}
});
Thread t6 = new Thread(() =>
{
while (true)
{
if (lk)
{
Thread.Sleep(20); //每1秒执行1次
Console.WriteLine("我是线程6.6666666666666666666666");
}
}
});
//t1.Start();//启动线程1
//t2.Start();//启动线程2
//passing parameter to parameterized thread
//t3.Start(4); //启动线程3
t4.Start(4);
//t5.Start();
//t6.Start();
////wait for t1 to fimish
//t1.Join(); //.Join 就是加入的意思,也就是说新创建的线程加入到进程中,并马上执行
//t2.Join();
//t3.Join();
//t4.Join();
//wait for t2 to finish
//t2.Join();
//wait for t3 to finish
//Console.WriteLine("所有线程 Exited in 100 secods", (DateTime.Now - startTime).TotalSeconds);
}
}
}