`
csstome
  • 浏览: 1519796 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

c#线程基础之线程控制

阅读更多

用ManualResetEvent和AutoResetEvent可以很好的控制线程的运行和线程之间的通信。msdn的参考为: http://msdn.microsoft.com/zh-cn/library/system.threading.autoresetevent.aspx http://msdn.microsoft.com/zh-cn/library/system.threading.manualresetevent.aspx 下面我写个例子,这里模拟了一个线程更新数据,两个线程读取数据。更新的时候需要阻止读取的两个现成工作。而另外还有一个信号量来控制线程的退出。

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#多线程基础

    ### C#多线程基础详解 #### 知识点一:多线程概念与优势 在C#中,多线程是指一个程序中同时执行多个线程的能力。一个线程是程序执行的基本单位,每个线程都有自己的指令指针、栈和局部变量,但共享相同的内存空间...

    C#多线程基础知识资料合辑(基础部分)

    以下是一些关于C#多线程的基础知识: 1. **线程的创建**:在C#中,可以使用`System.Threading.Thread`类来创建新的线程。通过实例化`Thread`类并提供一个代表新线程执行的委托,即可启动新线程。例如,`new ...

    C#多线程读写sqlite

    在C#编程中,多线程技术常用于提高应用程序的执行效率,特别是在处理数据库操作时。SQLite是一款轻量级、嵌入式的关系型数据库,它广泛应用于桌面应用、移动设备和Web开发。当多线程环境对SQLite进行读写操作时,...

    C#多线程进度条实例

    在C#编程中,多线程技术是一种提升应用程序性能的重要手段。它允许程序同时执行多个独立的任务,从而更好地利用系统资源。在这个实例中,“C#多线程进度条”是针对多线程环境下如何实现一个可视化进度条进行展示的一...

    c#编写串口通讯代码 多线程实现.rar_C#串口_c# 串口多线程_c#多线程_串口多线程_串口通信

    串口通信的实现,编程环境为C#,实现技术采用了多线程方式

    C#多线程消息处理例子

    在C#编程中,多线程消息处理是一个关键的领域,尤其在开发高效、响应迅速的应用程序时。本文将深入探讨“C#多线程消息处理例子”中的核心概念,包括消息处理、线程间通信、UI交互以及代理的使用。 首先,我们需要...

    C#多线程互斥实例 多线程获取同一变量

    C#语言提供了丰富的多线程支持,让我们能够编写出高效的多线程应用程序。在这个"多线程互斥实例 多线程获取同一变量"的示例中,我们将探讨如何在多个线程中安全地访问共享资源,避免数据不一致性和竞态条件。 首先...

    C#多线程编程实战 源代码

    本书是一本通俗易懂的C#多线程编程指南,通过70多个容易理解的示例,循序渐进地讲解C#5.0中的异步及并发编程,引导读者了解Windows下C#多线程编程的多样性。 通过阅读本书,你将学到: 使用原始线程、异步线程,...

    C#多线程编程实例实战.pdf

    C#多线程编程实例实战 C#多线程编程实例实战是指在C#语言中实现多线程编程的实例和实战经验。多线程编程是指在同一个进程中创建多个线程,以便提高程序的执行效率和响应速度。在C#语言中,可以使用Thread类和线程池...

    C# 多线程控制实例

    本实例主要探讨如何在C#中创建和控制多线程,包括线程的启动、挂起和停止。 首先,要创建一个新的线程,可以使用`System.Threading.Thread`类。以下是一个简单的例子: ```csharp Thread newThread = new Thread...

    C#多线程刷新界面

    在C#编程中,多线程技术是一种关键的性能优化手段,特别是在处理耗时操作时,如后台数据处理、文件读写或者网络通信等。它可以让应用程序同时执行多个任务,提高程序的响应速度和用户体验。当涉及到用户界面(UI)...

    C#多线程执行

    一、C#多线程基础 C#中的多线程主要依赖于System.Threading命名空间,其中Thread类是线程的基本实现。创建一个新的线程可以使用Thread类的构造函数,传入一个委托作为线程启动时要执行的方法。例如: ```csharp ...

    C#多线程 C#多线程

    在C#编程中,多线程是一种允许程序同时执行多个任务的技术,它极大地提高了应用程序的性能和响应速度。本文将深入探讨C#中的多线程概念、线程池的使用以及如何通过实例理解其工作原理。 首先,多线程在C#中是通过`...

    c# 多线程任务中结束全部线程

    在C#中,多线程是程序设计中的一个重要概念,它允许程序同时执行多个操作,从而提高程序的效率和响应性。然而,在某些情况下,我们可能需要终止正在运行的所有线程,这通常发生在应用程序需要关闭或者某个关键错误...

    C#多线程开发之并发编程经典实例.zip

    本资源“C#多线程开发之并发编程经典实例”提供了丰富的实例,旨在帮助C#开发者深入理解并掌握多线程技术。以下是关于C#多线程和并发编程的一些关键知识点: 1. **线程基础**:线程是操作系统分配CPU时间的基本单位...

    c# 多线程 上位机

    一、C#多线程基础 1.1 线程概述:线程是操作系统分配CPU时间的基本单位,每个进程至少包含一个线程。多线程允许程序同时执行多个任务,提高了计算资源的利用率。 1.2 创建线程:在C#中,可以通过继承`System....

    c#多线程中子线程动态改变ui控件

    C#多线程中子线程动态改变UI控件 在桌面应用程序中,控制UI界面是一个非常重要的任务。特别是在C#多线程编程中,子线程更新UI控件是一个常见的问题。本文将总结C#子线程更新UI控件的方法,介绍两种常用的方法,以便...

    C# 多线程界面假死解决,正确使用多线程

    C# 多线程界面假死解决,正确使用多线程 C# 多线程界面假死解决,正确使用多线程 C# 多线程界面假死解决,正确使用多线程 C# 多线程界面假死解决,正确使用多线程 C# 多线程界面假死解决,正确使用多线程 没分的朋友...

    C#多线程实现定时器

    C#多线程实现定时器 C#多线程实现定时器是指使用C#语言中的多线程编程技术来实现定时器功能。定时器是指在一定的时间间隔内执行某个操作或函数的机制。在C#中,可以使用System.Windows.Forms.Timer控件来实现定时器...

    c#多线程编程实战(原书第二版)源码

    《C#多线程编程实战(原书第二版)源码》是一本深入探讨C#中多线程技术的...通过学习和分析这个源码包,开发者能够深入了解C#中的多线程编程,提升在并发环境下的编程能力,为开发高效、稳定的应用程序奠定坚实基础。

Global site tag (gtag.js) - Google Analytics