zoukankan      html  css  js  c++  java
  • 创建线程(Background Thread)的N种方式

    第一、Thread类

      Thread类是实例化线程的主要方法;一个Thread实例管理一个线程,即执行序列。通过简单实例化一个对象,就可以创建一个线程,然后通过Thread对象提供的方法对线程进行管理。

      

    Thread thread = new Thread(_ => BackgroundMethod("第一、Thread类创建线程"));
                thread.Start();
                thread.Join();

    第二、ThreadPool(线程池)类

      提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。

    ThreadPool.QueueUserWorkItem(_ => BackgroundMethod("第二、ThreadPool创建线程"));

    第三、delegate(委托)

      委托异步回调方法创建线程,只需调用BeginInvoke委托和触发线程。然后,调用EndInvoke将阻塞当前线程。

      

    BackgroundMethodDelegate x = new BackgroundMethodDelegate(BackgroundMethod);
                IAsyncResult a = x.BeginInvoke("第三、delegate委托", null, null);
                x.EndInvoke(a);

    第四、BackgroundWorker类

      在单独线程上执行操作

      

    BackgroundWorker worker = new BackgroundWorker();
                worker.DoWork += delegate { BackgroundMethod("第四、BackGroundWorker创建线程"); };
                worker.RunWorkerAsync();

    第五、System.Threading.Timer

      创建一个计时器,提供以指定时间间隔执行方法机制。

    Timer timer = new System.Threading.Timer(_ => BackgroundMethod("第五、Timer计时器"), null, 0, Timeout.Infinite);

    第六、Task类

      最简单的任务异步操作

      

    using (Task task = new Task(() => BackgroundMethod("第六、Task类创建异步任务")))
                {
                    task.Start();
                    task.Wait();
                }

    第七、Task.Factory(Task另外一种创建方式)

      创建实例工厂的访问

    Task.Factory.StartNew(() => BackgroundMethod("第七、Task第二种创建异步方式"));

    第八、Parallel类

       System.Threading.Tasks命名空间下的,提供对并行循环和区域支持

    Parallel.Invoke(() => BackgroundMethod("第八、Parallel类"));

    第九、System.Reactive.Linq.Observable

      Reactive Extensions 概要

      Reactive Extensions (下面简称 Rx) 是在 Linq 可操作的数据源上针对 "异步"(BeginXXX/EndXXX) 和 "事件"(XXXCompleted) 上的扩展,也可以被称为 "Linq To Asynchronous" 和 " Linq To Events"。相比以前复杂的异步处理或者事件处理,Timer的处理等,结合Linq 形式的Rx编程模型更加简洁。

      关于 Rx 的安装,可以通过 Reactive Extensions (Rx) 的主页 的直接下载安装,当然也可以利用 NuGet 导入 dll (http://nuget.org/packages/Rx-Main) [译注: NuGet 是VS集成的在线 dll部署工具,非常方便]。Rx 不管是 Installer 还是 NuGet 安装的,都有 Stable(稳定版) 和 Experimental(实验版) 两种。

      

    Observable.Return("第九、Observable类", Scheduler.Default).Subscribe(BackgroundMethod);

    第十、ProcessStartInfo类

      指定启动进程时使用的一组值,严格上应该不处于创建线程这一栏,但已被建议作为一种方式在后台做一些事情,即使它没有资格作为一个后台线程。 (根据定义,一个后台线程是进程中的一个线程不会防止进程终止,而它仍然在运行。 )

    ProcessStartInfo startInfo = new ProcessStartInfo("StartThreads.exe", "OutOfProcess");
                startInfo.CreateNoWindow = false;
                startInfo.UseShellExecute = false;
                startInfo.RedirectStandardOutput = true;
                Process process = Process.Start(startInfo);
                Console.WriteLine(“第十:ProcessStartInfo”);
                process.WaitForExit();

     测试源码地址:http://files.cnblogs.com/xchit/StartThreads.rar

  • 相关阅读:
    设置datagrid的背影及对单元格进行设置
    利用结果集更新记录
    安装sql2000提示"以前的某个程序安装已在安装计算机上创建挂起的文件操作"解决办法
    xls.exe
    动态增加datagrid的行数
    Emergency Preparedness Resource Inventory(紧急预备资源列表系统)
    DataList中选择列的实现与数据的取得:
    Android中发送Http请求实例(包括文件上传、servlet接收)
    android文件上传到服务器
    C++获取程序执行时间
  • 原文地址:https://www.cnblogs.com/xchit/p/3425542.html
Copyright © 2011-2022 走看看