加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C# WinForm多线程暂停循环处理

(2014-03-27 15:38:37)
标签:

c暂停循环

winform暂停for循环

c停止循环

c控制循环

it

分类: 技术博论

    在需求设计中,我们会遇到通过按钮对程序正在生成的数据进行控制的情况,如:在滚动生成数据的时,通过按钮事件对其进行暂停,继续,停止等操作。有人建议通过时钟控制来实现,也有人建议通过多线程来控制实现。本文通过多线程的方法来控制实现在TextBox中追加循环生成文本时的暂停、继续、停止等处理。详细的处理过程如下,供大家参考:

一、设计工具和语言

    使用VS2010开发工具,C#语言编写的WinForm程序实现。

 

二、设计界面

    设计界面如下图所示:

C# <wbr>WinForm多线程暂停循环处理

C# <wbr>WinForm多线程暂停循环处理


:界面中TextBox 的ScrollBars属性设置为Vertical,Multiline属性设置为true


三、实现程序完整代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace stoptest
{
    public partial class Form2 : Form
    {
        public enum opState
        {
            none,   //无操作
            pause,  //暂停
            go_on,  //继续
            stop    //停止
        }
        private Thread myThread = null;
        private bool myThreadRun = false;
        private opState state = opState.none;
        private delegate void ShowMsgHandler(string msg);

        public Form2()
        {
            InitializeComponent();
        }
        ///
        /// 开始
        ///
        ///
        ///
        private void btn1_Click(object sender, EventArgs e)
        {
           
            if (myThread == null || myThread.ThreadState == ThreadState.Stopped)
            {
                myThreadRun = true;
                myThread = new Thread(new ThreadStart(runPro));
                myThread.IsBackground = true;
                myThread.Start();
            }
            else
            {
                myThreadRun = false;
            }
        }

        public void runPro()
         
            for (int i = 0; i < 10000; i++)
            {
                //状态开关控制
                switch (state)
                {
                    case opState.pause:                         
                        i--;
                        continue;
                    case opState.go_on:
                        break;
                    case opState.none:
                        break;
                    case opState.stop:
                        return;
                }
                if (this.InvokeRequired)
                {
                    this.Invoke(new ShowMsgHandler(ShowMsg), i.ToString());
                }
                else
                {
                    ShowMsg(i.ToString());
                }
                //Thread.Sleep(100);

            }
        }
        private void ShowMsg(string msg)
        {
            this.textBox1.AppendText(msg+"\r\n");
        }
        ///
        /// 暂停
        ///
        ///
        ///
        private void btn2_Click(object sender, EventArgs e)
        {
            state = opState.pause;
        }
        ///
        /// 继续
        ///
        ///
        ///
        private void btn3_Click(object sender, EventArgs e)
        {
            state = opState.go_on;
        }
        ///
        /// 停止
        ///
        ///
        ///
        private void btn4_Click(object sender, EventArgs e)
        {
            state = opState.stop;
            myThreadRun = false;
        }
    }
}




备注:本文在参考相关网络资料的基础上总结而得。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有