首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载  ┆ 端午节祝福 
设为首页
加入收藏
联系我们
热门关键字: .net应用  操作系统  Dreamweaver  WinRAR  网络推广
高级搜索
您当前的位置: 主页>NET专区>C#语言>C#编写控制线程的运行和线程之间的通信例子
C#编写控制线程的运行和线程之间的通信例子
来源: 发布时间:2008-06-22 发布人: 浏览: 人次   字体: [ ]  
本文主讲在C#语言中用ManualResetEvent和AutoResetEvent可以很好的控制线程的运行和线程之间的通信。在这里模拟了一个线程更新数据,两个线程读取数据。更新的时候需要阻止读取的两个现成工作。而另外还有一个信号量来控制线程的退出。
using System;    
using System.Collections.Generic;   
using System.ComponentModel;   
using System.Data;    
using System.Drawing;    
using System.Text;    
using System.Windows.Forms;      
 
namespace WindowsApplication35    
{    
    public partial class Form1 : Form    
    {    
        public Form1()    
        {    
            InitializeComponent();    
        }    
 
        System.Threading.ManualResetEvent mEvent = new System.Threading.ManualResetEvent(true);    
 
        //判断线程安全退出的信号量    
        System.Threading.ManualResetEvent mEventStopAll = new System.Threading.ManualResetEvent(false);   
 
        //ManualResetEvent的用法。    
        private void button1_Click(object sender, EventArgs e)    
        {    
            //一个线程模拟写入    
            new System.Threading.Thread(invokeWrite).Start();    
            //两个线程模拟读取    
            new System.Threading.Thread(invokeRead).Start();    
            new System.Threading.Thread(invokeRead).Start();    
        }  
 
        private void invokeWrite()    
        {    
            for (int i = 0; i < 100; i++)    
            {    
                //判断线程安全退出    
                if (mEventStopAll.WaitOne(10, false) == true) break;    
                //设置信号量,假设更新数据需要2秒,每更新一次暂停2秒.    
                mEvent.Reset();    
                Console.WriteLine("正在更新...");    
                System.Threading.Thread.Sleep(2000);    
                mEvent.Set();    
                System.Threading.Thread.Sleep(2000);    
            }    
        }    
        private void invokeRead()    
        {    
            while (mEvent.WaitOne() == true)    
            {    
                //判断线程安全退出    
                if (mEventStopAll.WaitOne(10, false) == true) break;  
                //假设读取一体数据用10毫秒.他需要判断信号量开关.    
                Console.WriteLine("读取一条数据:");    
                System.Threading.Thread.Sleep(10);    
            }    
        }    
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)    
        {    
            mEventStopAll.Set();    
        }    
    }    

↓下一篇:没有了
相 关 文 章   发布商链接
·C#向Excel报表中插入图片的2种方法
·提供一个基于.NET的加密/解密算法
·在.NET中产生随机密码字符串
·用C#实现查询IP所在区段的功能
·实例解释C#中Dispose和Close的区别
·C#区别和认识四个判等函数
·c#中的ArrayList属性祥解及其语法...
·C#中关于四舍五入函数的讨论及其解...
·使用C#编写查询IP段功能的程序
·关于C#在lucene.net下的中文切词
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·怎样在C#中删除只读文件及其...
·C#函数中返回多个值的两种方...
·如何在C#中插入照片到Excel文
·如何在c#中获取事件注册的方...
·C#对timer类的使用操作代码
·什么是泛型?泛型的一些概述
·C#如何从文本文件读取信息并...
·如何在c#中去掉字符串中的回...
·如何使用C#获取IIS服务器版本...
·什么是泛型编程思想?及其简...
·c#子线程控制进度条的一个简...
·C#如何获取文件路径中的文件...
·c#访问修饰符介绍及其应用实...
·什么是c#深拷贝与浅拷贝及其...
·C#获取IE临时文件夹中的文件...
热 门 文 章
·c#中收发邮件处理代码(POP3,...
·C#中关于四舍五入函数的讨论...
·c#中的ArrayList属性祥解及其...
·快速进行List排序的通用方法...
·String.Split 方法使用及其代...
·C#如何获取文件路径中的文件...
·什么是c#深拷贝与浅拷贝及其...
·用C#操作类读写WinCE平台Mac...
·asp.net打造进度条窗口代码,...
·谈谈对C#委托的理解,附代码实...
·初学者参考C#中操作XML修改完...
·用C#编写ActiveX控件代码实例
·浅谈C#对象深拷贝、浅铐贝、...
·C#获取IE临时文件夹中的文件...
·如何在c#中去掉字符串中的回...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .