C# - 线程操作
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; //引用相应命名空间
using System.Threading;
using System.Collections; namespace ThreadDemo
{
class ThreadDemo
{ private Thread thread1; private Thread thread2; private ArrayList arraylist; //删除所有数据之后,执行事件
private event EventHandler OnNumberClear; /// <summary>
/// 构造函数
/// </summary>
/// <param name="Number">数字</param>
public ThreadDemo(int Number)
{
//创建随机对象
Random db = new Random(); //创建数组
arraylist = new ArrayList(Number); //循环将产生的随机数放到数组中。
for (int i = ; i < Number; i++)
{
arraylist.Add(db.Next().ToString());
} //ThreadStart表示在此线程上调用的方法
thread1 = new Thread(new ThreadStart(Run)); //ThreadStart表示在此线程上调用的方法
thread2 = new Thread(new ThreadStart(Run)); OnNumberClear += ThreadDemo_OnNumberClear;
} /// <summary>
/// 事件执完成之后,执行事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void ThreadDemo_OnNumberClear(object sender, EventArgs e)
{
Console.WriteLine("执行完成,停止所有线程!");
thread1.Abort();//终止线程
thread2.Abort(); //终止线程
} /// <summary>
/// 两个线程要执行的方法
/// </summary>
public void Run()
{
string stringValue = null;
while (true)
{
Monitor.Enter(this);//锁定,保持同步
stringValue = (string)arraylist[];
Console.WriteLine(Thread.CurrentThread.Name + "删除了" + stringValue);
arraylist.RemoveAt();//删除ArrayList中的元素
if (arraylist.Count == )
{
OnNumberClear(this, new EventArgs());//引发完成事件
}
Monitor.Exit(this);//取消锁定
Thread.Sleep();
}
} /// <summary>
/// 启动两个线程
/// </summary>
public void Active()
{ thread1.Start();
thread2.Start();
} /// <summary>
/// Main
/// </summary>
public static void Main()
{
ThreadDemo th = new ThreadDemo(); th.Active();
}
}
}
C# - 线程操作的更多相关文章
- winform 跨线程操作控件
当进行winform的开发时,经常遇到用时比较久的操作,在传统的单线程程序中,用户必须等待这个耗时操作完成以后才能进行下一步的操作,这个时候,多线程编程就派上用场了,将这个耗时的操作放到一个新的子线程 ...
- 扩展BindingList,防止增加、删除项时自动更新界面而不出现“跨线程操作界面控件 corss thread operation”异常
在做界面程序时,常常需要一些数据类,界面元素通过绑定等方式显示出数据,然而由于UI线程不是线程安全的,一般都需要通过Invoke等方式来调用界面控件.但对于数据绑定bindingList而言,没法响应 ...
- WinForm中新开一个线程操作 窗体上的控件(跨线程操作控件)
最近在做一个winform的小软件(抢票的...).登录窗体要从远程web页面获取一些数据,为了不阻塞登录窗体的显示,开了一个线程去加载数据远程的数据,会报一个错误"线程间操作无效: 从不是 ...
- C#跨线程操作控件
1.首先通过按键创建子线程: 创建子线程,子线程调用changeText方法. private void btnOK_Click(object sender, EventArgs e) { Threa ...
- WinForm中跨线程操作控件
在WinForm编程时会遇到通过后台线程操作界面的情况,直接在后台线程执行的方法中直接操作控件会报错,这时候就要使用跨线程方式间接操作控件.下面是两种实现方式. 1.采用定义delegate的方式 ...
- 线程操作案例--生产者与消费者,Object类对线程的支持
本章目标 1)加深对线程同步的理解 2)了解Object类中对线程的支持方法. 实例 生产者不断生产,消费者不断消费产品. 生产者生产信息后将其放到一个区域中,之后消费者从区域中取出数据. 既然生产的 ...
- NSTimer 线程操作
http://www.jianshu.com/p/0c050af6c5ee 2.NSTimer的创建与撤销必须在同一个线程操作.performSelector的创建与撤销必须在同一个线程操作.
- C# 跨线程操作控件(简洁)
C# 跨线程操作控件 .net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生.解决此问题的方法有两个: 第一 ...
- 线程操作API
线程操作API 1.currentThread 2.getId() .getName().getPriority().getStart.isAlive().isDaemon().isInterrupt ...
- Winform跨线程操作界面的策略
BeginInvoke(new ThreadStart(() => toolStripButton1.Text = "aaa")); 1.非跨线程操作和部分跨线程get不会引 ...
随机推荐
- Android 开发笔记 “调用WebService”
WebService是一种基于SOAP协议的远程调用标准,通过webservice可以将不同操作系统平台.不同语言.不同技术整合到一块.在Android SDK中并没有提供调用WebService的库 ...
- Java疯狂讲义(三)
- Mac平台编译mupdf-qt的开源项目
How to compile mupdf-qt Compile on Linux Install tools and thirdparty libraries You should install s ...
- document.getElementsByClassName在ie8及其以下浏览器的兼容性问题
原生js方法“document.getElementsByClassName”在ie8及其以下浏览器中,不能使用. 修改:加入兼容性判断,在需要用到该方法的位置修改为getClassNames方法. ...
- Uva 225 Golygons
这道题如果直接用Dfs,运气好的话是可以直接过的. 但如果要在Dfs的基础上加快速度,剪枝是必不可少的. 我的剪枝策略: 1.当前点(x,y)回到出发点至少需要 |x| +| y| 步,如果剩余的步数 ...
- [置顶] mybatis批量新增系列之有主键的表的批量新增
前面介绍了无主键的表的批量插入,文章地址:http://blog.csdn.net/zhouxiaoyun0228/article/details/9980181 但是在开发中往往许多的表是需要主键的 ...
- UVALive 5102 Fermat Point in Quadrangle 极角排序+找距离二维坐标4个点近期的点
题目链接:点击打开链接 题意: 给定二维坐标上的4个点 问: 找一个点使得这个点距离4个点的距离和最小 输出距离和. 思路: 若4个点不是凸4边形.则一定是端点最优. 否则就是2条对角线的交点最优,能 ...
- PPTPD服务端搭建
http://www.360doc.com/content/14/0304/09/15165033_357558764.shtml . apt-get update; apt-get install ...
- if简单的写法之范围
/* Name:if的范围 Copyright: By.不懂网络 Author: Yangbin Date:2014年2月9日 03:22:32 Description: */ # include & ...
- C语言深度剖析---预处理(define)(转载)
1.数值宏常量 #define宏定义是个演技非常高超的替身演员,但也会耍大牌的,所以我们使用它要慎之又慎.它可以出现在代码的任何地方,从本行宏定义开始,以后的代码都认识宏了:也可以把任何东西都 ...