C# 多线程操作实例
1.多线程操作 一旦打开线程就必须记得关闭
1.第一部分
这是个数字叠加小功能
private void CountTo(int countTo, CancellationToken ct)
{
int sum = ;
for (; countTo > ; countTo--)
{
if (ct.IsCancellationRequested)
{
break;
}
sum += countTo;
//Invoke方法用于获得创建lbl_Status的线程所在的上下文
this.Invoke(new Action(() => textBox2.Text = sum.ToString()));
Thread.Sleep();
}
}
private CancellationTokenSource _cts;
private void button1_Click(object sender, EventArgs e)
{
_cts = new CancellationTokenSource();
ThreadPool.QueueUserWorkItem(state => CountTo(int.Parse(textBox1.Text), _cts.Token));
}
代码中Textbox1输入叠加数量的范围 ,textbox2 为显示Textbox
取消累加
private void button2_Click(object sender, EventArgs e)
{
if (_cts != null)
_cts.Cancel();
}
2.第二部分
这是个listbox 点击添加1.2.3.4.5。。。。。直到您点击停止
Thread[] workThreads = new Thread[];
private void button3_Click(object sender, EventArgs e)
{
for (int i = ; i < workThreads.Length; i++)
{
if (workThreads[i] == null)
{
//如果线程不存在,则创建
workThreads[i] = new Thread(new ThreadStart(DataGet));
workThreads[i].Name = i.ToString();
workThreads[i].Start();
}
else
{
//已经存在,如果没有运行,则启动
if (workThreads[i].ThreadState == ThreadState.Aborted || workThreads[i].ThreadState == ThreadState.Stopped)
{
workThreads[i] = new Thread(new ThreadStart(DataGet));
workThreads[i].Name = i.ToString();
workThreads[i].Start();
}
else
{
workThreads[i].Start();
}
}
}
}
public void DataGet()
{
while (true)
{
if (listBox1.Items.Count > )
{ int text = int.Parse(listBox1.Items[listBox1.Items.Count - ].ToString()) + ;
AddItem(text.ToString());
Thread.Sleep();
} }
//如果此方法退出了,那么这个线程也就退出了
}
private void AddItem(string text)
{
if (this.listBox1.InvokeRequired)
{
AddItemCallback d = new AddItemCallback(AddItem);
this.Invoke(d, new object[] { text });
}
else
{
this.listBox1.Items.Add(text);
}
}
关闭线程
private void button4_Click(object sender, EventArgs e)
{
this.listBox1.Items.Clear();
for (int i = ; i < workThreads.Length; i++)
{
//如果线程存在,并且状态不是停止也不是终止的,则终止该线程
if (workThreads[i] != null && workThreads[i].ThreadState != ThreadState.Stopped && workThreads[i].ThreadState != ThreadState.Aborted)
{
workThreads[i].Abort();
}
}
this.listBox1.Items.Add("");
}
3.第三部分是模仿着自己写的
//调取主板的声音
[DllImport("kernel32.dll", EntryPoint = "Beep")]
public static extern int Beep(int dwFreq, int dwDuration);
public void PLaySound()
{
for (int a = ; a < ; a++)
{
Beep(, );
Beep(, );
}
//thread.Join();
}
private void button5_Click(object sender, EventArgs e)
{
thread = new Thread(new ThreadStart(PLaySound));
thread.Start();
}
关闭进程
private void button6_Click(object sender, EventArgs e)
{
thread.Abort();
}
进程操作有很多种,仅供自己在编程时使用
C# 多线程操作实例的更多相关文章
- WinForm窗体多线程操作实例
最近在学习C# 多线程相关知识,这块一直比较薄弱,在网上查了一下资料,学习了一下前辈们的经验,小弟自己也比葫芦画瓢的写了一个,自学一下. 代码如下 using System; using System ...
- 编写Java程序,实现多线程操作同一个实例变量的操作会引发多线程并发的安全问题。
查看本章节 查看作业目录 需求说明: 多线程操作同一个实例变量的操作会引发多线程并发的安全问题.现有 3 个线程代表 3 只猴子,对类中的一个整型变量 count(代表花的总数,共 20 朵花)进行操 ...
- C#中级-常用多线程操作(持续更新)
一.前言 多线程操作一直是编程的常用操作,掌握好基本的操作可以让程序运行的更加有效.本文不求大而全,只是将我自己工作中常常用到的多线程操作做个分类和总结.平时记性不好的时候还能看看.本文参 ...
- MFC的多线程操作
记得用MFC做了一个图像自动修复软件,当时没有多线程操作这一概念,由于图像修复算法比较复杂,因此,当执行图像修复时,程序就像卡死了似得而不能做其他操作.其实MFC对这种情况有一种很好地解决方案,那就是 ...
- C#多线程操作界面控件的解决方案(转)
C#中利用委托实现多线程跨线程操作 - 张小鱼 2010-10-22 08:38 在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了 ...
- C# winform编程中多线程操作控件方法
private void Form1_Load(object sender, EventArgs e) { Thread newthread = new Thread(new ThreadStart( ...
- linux下C语言多线程编程实例
用一个实例.来学习linux下C语言多线程编程实例. 代码目的:通过创建两个线程来实现对一个数的递加.代码: //包含的头文件 #include <pthread.h> #include ...
- 多线程操作C++ STL vector出现概率coredump问题及尽量避免锁的双缓冲队列
多线程操作全局变量,必须考虑同步问题,否则可能出现数据不一致, 甚至触发coredump. 前段时间, 遇到一个多线程操作了全局的vector的问题, 程序崩了.场景是这样的:某全局配置参数保存在一 ...
- Java单线程多实例和多线程多实例
最近写了一个程序,是采用多线程往redis里面写入数据,想统计一下一共写了多少条数据,于是用了一个static的全局变量count来累加,这块代码抽象出来就是这样的: public class Mul ...
随机推荐
- Linux的启动级别
一.启动级别 1.查看linux 系统默认启动级别cat /etc/inittab id:3:initdefault: ##可以看出默认为三 2.查看某一服务在各个启动级别上是否启动[root@loc ...
- PLSQL Developer备份恢复oracle数据
使用PL sql提供的功能可以快速的备份恢复oracle数据. 1 导出存储过程,触发器,序列等所有用户对象.(备份) 在PL/SQL Developer的菜单Tools(工具) => Exp ...
- Flask之自定义模型类
4.3自定义模型类 定义模型 模型表示程序使用的数据实体,在Flask-SQLAlchemy中,模型一般是Python类,继承自db.Model,db是SQLAlchemy类的实例,代表程序使用的数据 ...
- Android使用简单的Service
首先要自定义一个Service,设定它在后台要干什么. public class MyService extends Service { @Nullable @Override public IBin ...
- delphi 手电筒
Self.CameraComponent1.TorchMode := TTorchMode.ModeOn;
- Spring Cloud Eureka 5 (服务发现与消费-简单的robbin使用)
通过上述介绍,我们已经有了服务注册中心和服务提供者 下面我们来尝试构建一个服务的消费者 它要完成两个功能,发现服务和消费服务,其中发现服务由eureka客户端完成,消费服务由ribbon完成. rib ...
- Spring Cloud Eureka 3 (Eureka client注册服务提供者)
在完成服务注册中心的搭建后我们来尝试下将一个既有的spring boot应用加入eureka的服务治理体系中 新建一个spring boot项目加入eureka client依赖 这里加入的eurek ...
- jenkins 学习记录1
主题 以前自己做些小玩意儿比如博客(http://blogv3.labofjet.com/)的时候,在远程服务器上的tomcat发布工程用的是目录的结构,而不是war.原因很简单.用目录结构的话每次只 ...
- shell编程之sed编辑器&gawk程序
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/560372 s ...
- java实现 数组中两个元素相加等于指定数的所有组合
package com.algorithm.hash; public class alg1 { public static void main(String argv[]) { int[] arr ...