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不会引 ...
随机推荐
- 【随手记-有空整理】使用PHPMailer和QQ邮箱实现邮件的自动发送
使用PHPMailer和QQ邮箱发送邮件时,在密码一栏里要填写QQ邮箱提供的授权码,而不是邮箱的登录密码 授权码获取可参考:http://service.mail.qq.com/cgi-bin/hel ...
- java.util.concurrent BlockingQueue
BlockingQueue 它实现了Queue接口.它是A BlockingQueue with one thread putting into it, and another thread taki ...
- Subsets 【dfs】
Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset must ...
- 17.1.1.8?Setting Up Replication with Existing Data设置复制使用存在的数据
17.1.1.8?Setting Up Replication with Existing Data设置复制使用存在的数据 当设置复制使用存在的数据,你需要确定如何最好的从master 得到数据到sl ...
- poj 1579 Function Run Fun(记忆化搜索+dp)
题目链接:http://poj.org/problem?id=1579 思路分析:题目给出递归公式,使用动态规划的记忆搜索即可解决. 代码如下: #include <stdio.h> #i ...
- [每天一个Linux小技巧] gdb 下一次运行多个命令
一般gdb运行的时候,我们仅仅能输入一个命令. 如: (gdb) c (gdb) bt 假设想运行多个命令怎么办? 能否像bash那样, 使用; 如 ls; ls 结论是不行. 但能够通过gdb 内建 ...
- Currency System in Geraldion (Codeforces 560A)
A Currency System in Geraldion Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64 ...
- BZOJ 1552: [Cerc2007]robotic sort( splay )
kpm大神说可以用块状链表写...但是我不会...写了个splay.... 先离散化 , 然后splay结点加个min维护最小值 , 就可以了... ( ps BZOJ 3506 题意一样 , 双倍经 ...
- JSONP跨域的原理解析[转]
转自 http://www.nowamagic.net/librarys/veda/detail/224 JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中, ...
- JavaScript 的数组操作--删除元素
在JavaScript中,可以很方便的删除指定位置的元素,这个是用到 splice方法, 该方法用于删除或替换数组中的部分数据. 其语法定义是 : splice(start , count [,new ...