这是个C# Winform程序,多线程问题。

我现在想在“开始计数”的按键上打开一个线程,并且不断自增,另外一个按键是关闭这个线程,停止计数,请问这个应该是怎么做呀,谢谢... 我现在想在“开始计数”的按键上打开一个线程,并且不断自增,另外一个按键是关闭这个线程,停止计数,请问这个应该是怎么做呀 ,谢谢 展开
 我来答
freeeeeewind
2016-10-05 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1355万
展开全部

实现题目的代码如下。解释在代码中:

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();
        }
    }
}

点击“启动计数”

点击“停止线程”

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式