C#多线程传递参数及任务用法示例

本文实例讲述了C#多线程传递参数及任务用法。分享给大家供大家参考,具体如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleSample
{
  class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine("这是主线程");
      DateTime dtStart = DateTime.Now;
      for (int i = 0; i < 100; i++)
      {
        Student s = new Student();
        s.name = "张三" + i;
        s.sex = "男";
        s.age = 28;
        Thread t = new Thread(ThreadWithParas);
        t.Start(s); //要给线程传递数据,需某个存储数据的类或结构
      }
      DateTime dtEnd = DateTime.Now;
      TimeSpan span = (TimeSpan)(dtEnd - dtStart);
      Console.ReadLine();
      Console.WriteLine("运行的时间 " + span.Milliseconds);
      Console.ReadLine();
    }
    static void ThreadWithParas(object o)
    {
      Student s = o as Student;
      Console.WriteLine("这是分线程" + Thread.CurrentThread.ManagedThreadId + " " + s.name + "---" + s.sex + "---" + s.age);
    }
  }
  public class Student
  {
    public string name;
    public string sex;
    public int age;
  }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleSample
{
  class Program
  {
    static void Main(string[] args)
    {
      //任务层次结构
      Task parent = new Task(ParentTask);
      parent.Start();
      Thread.Sleep(2000);
      Console.WriteLine(parent.Status);
      Thread.Sleep(4000);
      Console.WriteLine(parent.Status);
      Console.ReadLine();
    }
    //父任务
    static void ParentTask()
    {
      Console.WriteLine("task id {0}", Task.CurrentId);
      Task child = new Task(ChildTask); // , TaskCreationOptions.DetachedFromParent);
      child.Start();
      Thread.Sleep(1000);
      Console.WriteLine("parent started child");
      // Thread.Sleep(3000);
    }
    //子任务
    static void ChildTask()
    {
      Console.WriteLine("child");
      Thread.Sleep(5000);
      Console.WriteLine("child finished");
    }
  }
}

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》

希望本文所述对大家C#程序设计有所帮助。

(0)

相关推荐

  • c#使用ManagedWifi查看当前Wifi信号并选择wifi的示例

    使用ManagedWifi查看当前Wifi信号并选择wifi 复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;using NativeWifi; namespace WifiExample{    class WifiManager    {        //CMCC的WIFISSID        public WIFISSID cmccWifiSSID;

  • C#获取Windows进程监听的TCP/UDP端口实例

    1.在Windows下用CMD netstat命令可以获得当前进程监听端口号的信息,如netstat -ano可以看到IP.port.状态和监听的PID.那么可以执行CMD这个进程得到监听的端口号信息,C#代码如下: 复制代码 代码如下: //进程id int pid = ProcInfo.ProcessID; //存放进程使用的端口号链表 List<int> ports = new List<int>(); Process pro = new Process(); pro.Sta

  • C#信号量用法简单示例

    本文实例讲述了C#信号量用法.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; /* * 标题:如何使用信号量的示例代码 * Author:kagula * Date:2015-6-16 * Environment:VS2010SP1, .NET Framework 4 client profi

  • C#控制IE进程关闭和缓存清理的实现代码

    复制代码 代码如下: class IEUtil {    public static void openIE(string url) {        try {            //System.Diagnostics.Process.Start(url);            System.Diagnostics.Process p = new System.Diagnostics.Process();            p.StartInfo.FileName = "iexpl

  • C#线程定义和使用方法详解

    一.C# Thread类的基本用法 通过System.Threading.Thread类可以开始新的线程,并在线程堆栈中运行静态或实例方法.可以通过Thread类的的构造方法传递一个无参数,并且不返回值(返回void)的委托(ThreadStart),这个委托的定义如下: [ComVisibleAttribute(true)] public delegate void ThreadStart() 我们可以通过如下的方法来建立并运行一个线程. 复制代码 代码如下: using System;  u

  • 浅解关于C#多线程的介绍

    多线程的相关概念--------------------------------------------------------------------------------1.进程:是操作系统结构的基础:是一个正在执行的程序:计算机中正在运行的程序实例:可以分配给处理器并由处理器执行的一个实体:由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元.2.线程:线程是程序中一个单一的顺序控制流程.是程序执行流的最小单元.另外,线程是进程中的一个实体,是被系统独立调度和分派的基本

  • C#网络编程基础之进程和线程详解

    在C#的网络编程中,进程和线程是必备的基础知识,同时也是一个重点,所以我们要好好的掌握一下. 一:概念 首先我们要知道什么是"进程",什么是"线程",好,查一下baike. 进程:是一个具有一定独立功能的程序关于某个数据集合的一次活动.它是操作系统动态执行的基本单元, 在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元. 线程:是"进程"中某个单一顺序的控制流. 关于这两个概念,大家稍微有个印象就行了,防止以后被面试官问到. 二:进程

  • C#获取进程的主窗口句柄的实现方法

    通过调用Win32 API实现. 复制代码 代码如下: public class User32API{    private static Hashtable processWnd = null; public delegate bool WNDENUMPROC(IntPtr hwnd, uint lParam); static User32API()    {        if (processWnd == null)        {            processWnd = new

  • c#多线程中Lock()关键字的用法小结

    本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待. 每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生. 其中,lock是一种比较好用的简单的线程同步方式,它是通过为给定对象获取互斥锁来实现同步的.它可以保证当一个线程在关键

  • C#获取进程和对进程的操作

    最近看到一个考试系统,有个功能是用来监视进程的.一旦发现如Communicator.exe这样的违禁软件就立即杀死进程并上报给服务器.我稍 微研究了一下,这个功能实现起来其实很简单.就是使用ManagementObjectSearcher获取进程列表,然后放在一个Collection 里,之后就可以按照自己的逻辑去做了. 复制代码 代码如下: using System;using System.Management; namespace ConsoleApplication3{ class Pr

  • C#子线程更新UI控件的方法实例总结

    本文实例总结了C#子线程更新UI控件的方法,对于桌面应用程序设计的UI界面控制来说非常有实用价值.分享给大家供大家参考之用.具体分析如下: 一般在winform C/S程序中经常会在子线程中更新控件的情况,桌面程序UI线程是主线程,当试图从子线程直接修改控件属性时会出现"从不是创建控件的线程访问它"的异常提示. 跨线程更新UI控件的常用方法有两种: 1.使用控件自身的invoke/BeginInvoke方法 2.使用SynchronizationContext的Post/Send方法更

随机推荐