在需求设计中,我们会遇到通过按钮对程序正在生成的数据进行控制的情况,如:在滚动生成数据的时,通过按钮事件对其进行暂停,继续,停止等操作。有人建议通过时钟控制来实现,也有人建议通过多线程来控制实现。本文通过多线程的方法来控制实现在TextBox中追加循环生成文本时的暂停、继续、停止等处理。详细的处理过程如下,供大家参考:
一、设计工具和语言
使用VS2010开发工具,C#语言编写的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: