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

C# 多线程处理相关说明: WaitHandle,waitCallback, ThreadPool.QueueUserWorkItem

    博客分类:
  • c#
 
阅读更多

 

最近接触C#的一个项目,里面用到了多线程处理,这里做个备忘

 

  class TestThread
    {
        
        static void Main()
        {
            //使用WaitHandle静态方法阻止一个线程,直到一个或多个同步对象接收到信号
            WaitHandle[] waitHandles = new WaitHandle[] 
            {
            new ManualResetEvent(false),
            new ManualResetEvent(false)
            };

            WaitCallback waitCallback = new WaitCallback(MyThreadWork);

            WaitCallback waitCallback2 = new WaitCallback(MyThreadWork2);     // 增加线程工作类型

            ThreadPool.QueueUserWorkItem(waitCallback, "第一个线程");
            ThreadPool.QueueUserWorkItem(waitCallback, "第二个线程");

            MyState myState = new MyState("第三个线程", 100, waitHandles[0]); // 增加自定义的线程参数类型

            ThreadPool.QueueUserWorkItem(waitCallback2, myState);
            ThreadPool.QueueUserWorkItem(waitCallback2, new MyState("第四个线程", 2, waitHandles[1]));

            WaitHandle.WaitAll(waitHandles);

            Console.WriteLine("MyState 的 Number 值为: {0}", myState.Number);    // 读取线程改变后的 MyState
        }

        public static void MyThreadWork(object state)
        {
            Console.WriteLine("MyThreadWork 开始启动 …… {0}", (string)state);
            Thread.Sleep(1000);
            Console.WriteLine("运行结束…… {0}", (string)state);
        }

        // use MyState class 
        public static void MyThreadWork2(object state)
        {
            MyState myState = ((MyState)state);
            Console.WriteLine("MyThreadWork2 开始启动…… {0},{1}", ((MyState)state).Info, ((MyState)state).Number);
            Thread.Sleep(1000);
            ((MyState)state).Number += 1;      // 将 state的 Number 加 1
            Console.WriteLine("运行结束…… {0},{1}", ((MyState)state).Info, ((MyState)state).Number);
            ((ManualResetEvent)myState.DoneEvent).Set();
        }

    }

    public class MyState
    {
        private string info;
        private int number;
        private WaitHandle _doneEvent;


        public MyState(string info, int number, WaitHandle doneEvent)
        {
            this.info = info;
            this.number = number;
            this._doneEvent = doneEvent;
        }

        public string Info
        {
            get
            {
                return this.info;
            }
            set
            {
                this.info = value;
            }
        }

        public WaitHandle DoneEvent
        {
            get
            {
                return this._doneEvent;
            }
        }

        public int Number
        {
            get
            {
                return this.number;
            }
            set
            {
                this.number = value;
            }
        }
    }
 

 

 

程序运行结果截图

  • 大小: 26.4 KB
分享到:
评论

相关推荐

    大漠的c#多线程模板

    在C#编程中,多线程是一个核心概念,它允许程序同时执行多个任务,从而提高应用程序的效率和响应性。"大漠的c#多线程模板"提供了一个实际的例子,帮助开发者理解和应用多线程技术。下面我们将深入探讨这个主题。 ...

    C#多线程 C#多线程

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

    c#多线程的使用,非常的详细清晰

    在C#编程中,多线程是一个至关重要的概念,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应性。本教程将深入探讨C#中的多线程使用,包括其核心概念、创建方法以及常见操作。 一、线程基础 1. **线程...

    c#多线程编程范例

    在C#编程中,多线程是一项核心技能,特别是在现代计算环境中,多任务处理和并发执行已经成为提升系统性能的关键。本资源"**c#多线程编程范例**"提供了全面的C#多线程开发示例,旨在帮助开发者深入理解和掌握多线程的...

    c#多线程线程池和异步编程

    【C#多线程线程池和异步编程】深入探讨 在.NET框架中,多线程编程是实现并发执行任务的重要手段。本篇将详细讲解`System.Threading.ThreadPool`类、`System.Threading.Timer`类以及异步编程的使用。 **1. System....

    C#多线程详解

    ### C#多线程详解 #### 一、基础篇 **1. 怎样创建一个线程** 在C#中创建线程的方式有很多种,这里主要介绍三种常用的创建方式:使用`Thread`类、使用`Delegate.BeginInvoke`以及使用`ThreadPool....

    C# 开发23种线程实例,可单独运行

    在C#编程中,线程是并发执行任务的基础单元,它允许程序同时处理多个操作,提高了应用程序的效率和响应性。本资源包含了23个不同的线程实例,旨在帮助开发者深入理解和熟练掌握C#中的线程操作。这些实例都是可独立...

    c#多线程示例

    在C#编程中,多线程是一个核心概念,它允许程序同时执行多个任务,从而提高应用程序的效率和响应性。本示例“MultithreadingConsoleDemo”旨在帮助开发者理解并应用C#中的多线程技术。 一、多线程基础 多线程是指...

    c#+多线程学习

    多线程是C#编程中一个重要的概念,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应性。这篇内容将深入探讨C#中的多线程及其在实际项目中的应用。 一、多线程基础 1. 线程的创建:在C#中,可以使用`...

    多线程采集C#源代码

    本文将深入探讨多线程采集的C#实现及其相关知识点。 首先,我们要理解什么是多线程。在单线程程序中,所有任务按顺序执行,而多线程允许程序同时执行多个任务,从而提高了资源利用率和程序响应速度。在C#中,我们...

    c#线程实例(好用的)

    在C#编程中,线程是并发执行任务的基本单元,它允许程序同时处理多个操作,极大地提升了程序的执行效率和用户体验。"C#线程实例(好用的)"这个资源显然是为了提供一种实用的线程应用示例,帮助开发者更好地理解和运用...

    多线程教程

    ### 多线程教程知识点详解 #### 基础篇 **怎样创建一个线程** ...以上就是关于.NET多线程的相关知识点,涵盖了基础知识、WinForm中的多线程编程、线程池的使用以及同步机制等方面的内容。希望这些信息对你有所帮助。

    CSharp多线程的详细教程

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在C#中,它使得程序能够同时处理多个任务,提高程序的效率和响应性。本文将深入探讨C#中的多线程,涵盖其核心概念、使用方法以及注意事项。 1. **多线程的...

    .NET多线程详解

    .NET多线程详解 在.NET框架中,多线程编程是一项关键技能,它允许开发者同时执行多个任务,提高应用程序的效率和响应性。...同时,了解如何在WinForm和Web环境中正确处理多线程问题,对于避免潜在错误至关重要。

    .net版本简单线程调用源码--值得下载

    本资源提供的".net版本简单线程调用源码--值得下载"可能包含了关于如何在C#中进行线程操作的实例代码,这对于理解和实践多线程编程非常有帮助。 首先,我们来看C#中创建线程的基本方式。`System.Threading.Thread`...

    .net版本简单线程调用源码_《0528》.rar

    ThreadPool.QueueUserWorkItem(new WaitCallback(MyThreadPoolMethod), data); ``` `MyThreadPoolMethod`是你要在线程池中运行的方法,`data`是传递给该方法的参数。 线程优先级是另一个重要的概念,.NET的Thread...

    多线程机制探索在NET下线程开发下载

    ThreadPool.QueueUserWorkItem(new WaitCallback(YourMethod)); ``` 四、线程优先级 每个线程都有一个优先级,表示其被调度的优先程度。可以通过`Thread.Priority`属性设置,包括:Lowest、BelowNormal、Normal、...

    C#线程队列用法实例分析

    ThreadPool.QueueUserWorkItem(new WaitCallback(YourMethod), parameter); ``` 其中,`YourMethod`是你想要在线程池中执行的方法,`parameter`是传递给该方法的参数。 2. **运行线程池任务**: - 线程池会自动...

    利用HTTP实现多线程文件下载[整理].pdf

    ThreadPool.QueueUserWorkItem(new WaitCallback(d.DownloadRange), new object[] { sourceUri, targetFileName, d.StartPosition, d.EndPosition }); } // 等待所有线程完成 WaitHandle.WaitAll(events); ``` ##...

    .net线程问答.net线程全攻略

    三是利用线程池的`ThreadPool.QueueUserWorkItem`,传入一个`WaitCallback`委托和参数来启动线程。 2. **受托管的线程与Windows线程**:在.NET中,受托管的线程是由.NET Framework管理的,它们与操作系统中的...

Global site tag (gtag.js) - Google Analytics