我已启动一个线程,我希望用户能够通过单击表单上的按钮来中断它。我找到了以下代码,它很好地展示了我想要的东西。
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
namespace ExThread {
public partial class MainForm : Form {
public int clock_seconds=0;
[STAThread]
public static void Main(string[] args) {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
public MainForm() {
InitializeComponent();
Thread thread_clock = new Thread(new ThreadStart(Thread_Clock));
thread_clock.IsBackground = true;
thread_clock.Start();
}
delegate void StringParameterDelegate (string value);
public void Update_Label_Seconds(string value) {
if (InvokeRequired) {
BeginInvoke(new StringParameterDelegate(Update_Label_Seconds), new object[]{value});
return;
}
label_seconds.Text= value + " seconds";
}
void Thread_Clock() {
while(true) {
clock_seconds +=1;
Update_Label_Seconds(clock_seconds.ToString());
Thread.Sleep(1000);
}
}
private void btnStop_Click(object sender, EventArgs e)
{
}
}
}
我添加了btnStop方法。需要添加什么代码来停止thread_clock线程。
感谢。
答案 0 :(得分:8)
首先,线程需要能够识别它应该结束。变化
void Thread_Clock() {
while(true) {
到
bool endRequested = false;
void Thread_Clock() {
while(!endRequested) {
然后在按钮点击处理程序中将endRequested设置为True。
private void btnStop_Click(object sender, EventArgs e)
{
endRequested = true;
}
请注意,对于这种特定情况,使用Timer
可能更合适http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx
只需根据需要启动和停止计时器。您可以从计时器的Tick()事件更新时钟。