一、先造一个窗体,其中就开始按钮,暂停按钮,以及listbox文本框

二、当点击开始的时候,数据会无限的往listbox中加,为了防止卡住和提升效率,便造了一个新的线程来执行开始操作

namespace 线程Again
{
//首先要定义一个委托(委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递)
public delegate void Weituo();//利用这个委托来用方法调用方法
public partial class Form1 : Form
{
//定义好了委托,开始定义一个线程;
private Thread therad;
//定义一个bool型的变量来存储是开始还是暂停
private bool isok=true;
//定义一个常量
private long i;
public Form1()
{
InitializeComponent();
//Control.CheckForIllegalCrossThreadCalls = false;//不要检查安全性(一般不用这句),如果有这句便不需要委托了
} private void button1_Click(object sender, EventArgs e)//开始按钮
{
button1.Enabled = false;
//当点击开始的时候,将数据一条条的添加到listbox1中,点暂停便会终止,因为是循环添加数据,一旦点开始变不会停下来,所以这便需要多线程操作,开始按钮有自己单独的线程 //首先将线程实例化出一个
therad = new Thread(new ThreadStart(Start)); //为button1按钮造一个新的线程,这样点button1的话,就会运行新造的这个线程,而不会影响到窗体的主线程
therad.IsBackground = true;//确认新造的线程后台运行
therad.Start(); } //定义一个Start函数,用来循环放数据
public void Start()
{
while (isok)//循环调用委托,改控件属性这个工作交给委托来做
{
//在循环里调用委托函数
weituo(); }
} //定义一个委托函数
public void weituo()
{ //判断一下新造的(button1)线程来访问listbox1这个控件的listBox1.InvokeRequired属性是true还是false;如果是其他的线程来访问自己的线程,则返回值是ture
if(listBox1.InvokeRequired)
{
//因为是其他的线程来访问自己的线程,所以返回值是true,既然是其他的线程来访问,为了安全,必须转回到自己的线程,这就用到了委托
Weituo x = new Weituo(weituo);//将weituo函数变成新造的线程能够调用的
this.Invoke(x);//在拥有button1控件的窗体上执行这个委托
}
else
{
listBox1.Items.Insert(,i);//一旦返回值是false,便将数据添到listbox1中
i++;
} } private void button2_Click(object sender, EventArgs e)
{
isok = false;
button1.Enabled = true;
}
}
}

三、点暂停按钮的时候停止添加数据

多线程操作(循环往listbox中添加数据)的更多相关文章

  1. Eclipse中java向数据库中添加数据,更新数据,删除数据

    前面详细写过如何连接数据库的具体操作,下面介绍向数据库中添加数据. 注意事项:如果参考下面代码,需要 改包名,数据库名,数据库账号,密码,和数据表(数据表里面的信息) package com.ning ...

  2. ligerui_实际项目_003:form中添加数据,表格(grid)里面显示,最后将表格(grid)里的数据提交到servlet

    实现效果: "Form"中填写数据,向本页"Grid"中添加数据,转换成Json数据提交,计算总和,Grid文本框可编辑,排序 图片效果: 总结: //disp ...

  3. 用PHP向数据库中添加数据

    显示页面(用户可见) <body><form action="chuli.php" method="post">  //将该页面接收的数 ...

  4. C语言+ODBC+SQL 操作(向SQL里面添加数据)

    为了节省时间,我就引用上一节的数据库的表和C语言的结构体数组,在结构体数组中添加数据,清空数据库数据. 第一步查询:SQLBindParameter函数的用法. SQLRETURN SQLBindPa ...

  5. c#.net循环将DataGridView中的数据赋值到Excel中,并设置样式

    Microsoft.Office.Interop.Excel.Application excel =                new Microsoft.Office.Interop.Excel ...

  6. 使用MySQL Workbench建立数据库,建立新的表,向表中添加数据

    使用MySQL Workbench建立数据库,建立新的表,向表中添加数据 初学数据库,记录一下所学的知识.我用的MySQL数据库,使用MySQL Workbench管理.下面简单介绍一下如何使用MyS ...

  7. 向数据库中添加数据,通过se16 不能添加,通过 代码可以添加的原因

    1:  在向数据库中添加数据时,通过客户端se16 准备对 数据表进行添加数据,提示如下: 找了以下原因,如下: https://www.baidu.com/link?url=3yRtAfY1_9XG ...

  8. java向文件中添加数据---手动版日志添加

    核心代码为创建多级文件夹创建 //目标文件 File file=new File(filePath); //若不存在即创建文件 if(!file.exists()) { if (!file.getPa ...

  9. phpStudy3——往数据库中添加数据

    前言: 前边介绍了查询数据库的方法,这里介绍下往数据库中添加数据的方法. 项目需求: 用户在前端页面输入的用户名和手机号码,点击提交后后端判断手机号码是否已经存在.如果不存在,那么插入数据库到数据库, ...

随机推荐

  1. ol3简介

    ol3从根本上进行了重新设计,相对于ol2,他符合现代浏览器的一些设计理念,使用了js新的特性,initial版本的目的是支持原来ol2的大多数功能,支持公网上流行的缓存切片,支持常见的矢量数据格式. ...

  2. 疯狂java讲义——继承

    本文章只是记录我在学习疯狂java讲义里面,对之前java知识查缺补漏进行的总结. 方法重写 方法重写要遵循"两同两小一大"规则."两同"即方法名相同.形参列表 ...

  3. Unity3D 使用 Editor 脚本,自定义 脚本的属性面板

    1. 先有一个普通的 继承自 MonoBehaviour 的脚本. 2. 创建一个 Editor 文件夹, 写 关于 UnityEditor 的脚本 都要放在这个文件夹下,不然会编译出错. 具体的实现 ...

  4. PageControl(弹性滚动)

    使用网上源码KYAnimatedPageControl     self.pageControl = [[KYAnimatedPageControl alloc]initWithFrame:CGRec ...

  5. NetCore第一步:千里之行 始于环境构筑

    今年的6月28号,微软发布了一个正式版本 NetCore.发布的同时,也同时发布了CoreStudio. 这个激动人心的时刻,让跨平台已经不再是什么神话. 让我们一起来开始Core的开发之旅吧. 万事 ...

  6. JS初学的一些易错的知识点

    1.  false ,0 , "" ,undefined , null  在Boolean 环境下当成 false: null  在数值环境下当成 0: undefined 在数值 ...

  7. Linux zip解压/压缩并指定目录

    方法如下: 压缩并指定目录举例:zip -r /home/kms/kms.zip /home/kms/server/kms 解压并指定目录 举例:unzip /home/kms/kms.zip -d ...

  8. ls 知识点

    ls -R 将会以目录的形式列出所有文件,-S 以文件的大小列出所有文件,-t 将会按照修改时间来列出文件,-i 会显示文件的inode

  9. lintcode:形状工厂

    题目 工厂模式是一种常见的设计模式.实现一个形状工厂 ShapeFactory 来创建不同的形状类.这里我们假设只有三角形,正方形和矩形三种形状. 样例 ShapeFactory sf = new S ...

  10. 使用原生JavaScript

    如果你只需要针对现代浏览器,很多功能使用原生的 JavaScript 就可以实现. DOM Selectors //jQuery var ele = $("#id .class") ...