这是个C# Winform程序,多线程问题。
我现在想在“开始计数”的按键上打开一个线程,并且不断自增,另外一个按键是关闭这个线程,停止计数,请问这个应该是怎么做呀,谢谢...
我现在想在“开始计数”的按键上打开一个线程,并且不断自增,另外一个按键是关闭这个线程,停止计数,请问这个应该是怎么做呀 ,谢谢
展开
1个回答
展开全部
实现题目的代码如下。解释在代码中:
using System;
using System.Windows.Forms;
using System.Threading;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
// 标志:停止线程
bool blnStop;
// 委托:用于跨线程调用。计数后台线程和界面主线程是两个不同的
// 的线程。从后台线程调用主线程时要用到这个委托
delegate void ShowCountDelegate(int count);
public Form1()
{
InitializeComponent();
button1.Enabled = true;
button2.Enabled = false;
}
//
// “启动计数”按钮
//
private void button1_Click(object sender, EventArgs e)
{
// 启动后台计数线程
blnStop = false;
Thread t = new Thread(WorkThread);
t.IsBackground = true;
t.Start();
button1.Enabled = false;
button2.Enabled = true;
}
//
// “停止线程”按钮
//
private void button2_Click(object sender, EventArgs e)
{
blnStop = true;
button1.Enabled = true;
button2.Enabled = false;
}
//
// 后台计数线程
//
private void WorkThread()
{
int count = 0;
while (!blnStop)
{
count ++;
ShowCount(count);
// 以下语句让界面刷新
Thread.Sleep(200);
}
}
//
// 显示计数值
//
private void ShowCount(int count)
{
if (textBox1.InvokeRequired)
{
// 需要跨线程处理。利用 BeginInvoke 和前面
// 定义的委托,调用ShowCount(...)
textBox1.BeginInvoke(
new ShowCountDelegate(ShowCount),
count);
return;
}
// 显示计数值
textBox1.Text = count.ToString();
}
}
}
点击“启动计数”
点击“停止线程”
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询