zoukankan      html  css  js  c++  java
  • C#多线程多参数传递

    之前做了一个小的应用程序,用的是c#语言,涉及到了多线程的多参数传递,经过查找资料总结了一下解决方案!

    第一种解决方案的原理是:将线程执行的方法和参数都封装到一个类里面。通过实例化该类,方法就可以调用属性来实现间接的类型安全地传递多个参数。看如下代码:

    using System;
    using System.Threading;

    //ThreadWithState 类里包含了将要执行的任务以及执行任务的方法
    public class ThreadWithState {
    //要用到的属性,也就是我们要传递的参数
    private string boilerplate;
    private int value;

    //包含参数的构造函数
    public ThreadWithState(string text, int number)
    {
    boilerplate = text;
    value = number;
    }

    //要丢给线程执行的方法,本处无返回类型就是为了能让ThreadStart来调用
    public void ThreadProc()
    {
    //这里就是要执行的任务,本处只显示一下传入的参数
    Console.WriteLine(boilerplate, value);
    }
    }
    ---------------分隔线---------------
    //用来调用上面方法的类,是本例执行的入口
    public class Example {
    public static void Main()
    {
    //实例化ThreadWithState类,为线程提供参数
    ThreadWithState tws = new ThreadWithState(
    “This report displays the number {0}.”, 42);

    // 创建执行任务的线程,并执行
    Thread t = new Thread(new ThreadStart(tws.ThreadProc));
    t.Start();
    Console.WriteLine(“Main thread does some work, then waits.”);
    t.Join();
    Console.WriteLine(
    “Independent task has completed; main thread ends.”);
    }
    }
    从上面的例子就能很清楚的得到我们想要的结果,注意这句代码的用法:
    Thread t = new Thread(new ThreadStart(tws.ThreadProc));

    第二种解决方案是的原理是把多个参数封装成object来传递,然后在线程里使用时拆箱即可,看如下代码:

    ParameterizedThreadStart ParStart = new ParameterizedThreadStart(ThreadMethod);
    Thread myThread = new Thread(ParStart);
    object o = “hello”;
    myThread.Start(o);

    ThreadMethod如下:
    public void ThreadMethod(object ParObject)
    {
    //程序代码
    }

  • 相关阅读:
    PChar,PAnsiChar,String,AnsiString,Char数组,AnsiChar数组转换
    Property ClientHeight does not exist 问题解决
    单调栈求笛卡尔树
    luogu4294 [WC2008]游览计划(状压DP/斯坦纳树)
    luogu4074 [WC2013]糖果公园(树上带修莫队)
    loj6570 毛毛虫计数(生成函数FFT)
    CF1097D Makoto and a Blackboard(期望)
    CF600E Lomsat gelral(线段树合并)
    luogu4383 [八省联考2018]林克卡特树(带权二分+dp)
    51nod1847 奇怪的数学题 (Min_25筛+第二类斯特林数)
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6332620.html
Copyright © 2011-2022 走看看