美文网首页
C# 开启子线程的四种情况

C# 开启子线程的四种情况

作者: kvi | 来源:发表于2016-12-06 19:16 被阅读0次

接触C#和VS也差不多五个月了,其实也还是个小白,关于线程的用法其实在网上找又一大堆,无形参无返回,无形参有返回,有形参无返回,有形参有返回的四种情况,简单的总结一下我使用过的方法吧~

1.无形参无返回

Thread thread = new Thread(doWork);
thread.start();

2.无形参有返回
(这里的栗子是,doThread返回一个bool值)

public delegate bool MyDelegate();//根据doThread的返回类型声明一个委托

private  void delegateThread()
{
    MyDelegate dele = new MyDelegate(doWork);//委托,但是还是还会在主线程上处理
    bool result = dele.Invoke(); //收集返回值
}

private void doThread()
{
    Control.CheckForIllegalCrossThreadCalls = false;//防止获取界面控件是抛出的异常
    Thread thread = new Thread(new ThreadStart(delegateThread));
    thread.Priority = ThreadPriority.Highest;//优先级
    thread.IsBackground = true;//与程序共存亡
    thread.Start();
}

3.有形参无返回

Control.CheckForIllegalCrossThreadCalls = false;
ThreadStart starter = delegate { doWork(parameter); };//parameter就是填入的参数
Thread thread= new Thread(new ThreadStart(starter));
thread.IsBackground = true;
thread.Start();

4.有形参有返回
(这里的栗子是,doThread一个int型的形参是,返回一个int值)
其实跟2.无形参有返回 差不多,都是用一个委托函数包起来。还有可以用一个类,把你的方法和成员变量包起来用也是一样可以的。我这里就说一种方法吧。

public delegate int MyDelegate(int a);

static void Main(string[] args)
{
    Thread thread;
    thread = new Thread(new ThreadStart(delegateThread));
    thread.Start();
    thread.IsBackground = true;

    Console.ReadLine();
}

private static void delegateThread()
{
    MyDelegate dele = new MyDelegate(doWork);
    int result = dele.Invoke(3); //收集返回值
    Console.WriteLine("result:" + result);

}

private static int doWork(int num)
{
    Console.WriteLine("doWork!\n");
    return num * num;
}

其实每种情况都有多种实现的方法,这里就只介绍下我用过的,可能有些欠缺的地方,欢迎指点~

相关文章

  • C# 开启子线程的四种情况

    接触C#和VS也差不多五个月了,其实也还是个小白,关于线程的用法其实在网上找又一大堆,无形参无返回,无形参有返回,...

  • Android中采用线程池进行线程的管理

    当遇到耗时操作,比如网络请求,频繁更新UI界面,这时就需要开启子线程,至于为什么开启子线程,无非防止阻塞UI线程,...

  • iOS 子线程用runloop保活的一个方案

    在我们需要频繁地开启子线程执行操作的时候,我们可以采用开启子线程runloop的方式保活子线程,这样避免频繁创建线...

  • Kotlin异步更新主线程

    常用情况:开启子线程进行耗时操作,然后把结果返回给主线程代码如下: 不足的地方,希望各位大佬能多多指教,谢谢了。

  • C#学习笔记

    C#中的线程(一)入门 C#中的线程(二) 线程同步基础 C#中的线程(三) 使用多线程 20190130补充: ...

  • NSThread

    开启子线程方式 创建线程 分离出子线程 开启后台线程 线程属性 线程名字 线程优先级0.0~1.0 默认0.5优先...

  • 关于C#的Dictionary多线程情况下CPU 100%的问题

    【关于C#的Dictionary多线程情况下CPU 100%的问题】 C#的偶发性 CPU 100%的问题,定位到...

  • Android线程篇(三):深入理解Java线程池(一)

    上篇文章我们讲解了Java的四种线程池,我们知道如何去使用四种线程池,以及在合适的情况下使用合适的线程池,常言道,...

  • 线程题目

    一:有以下四种情况 线程一和线程二重合的情况: 0+1+-2=-1 线程一和线程二部分重合的情况: 0+1+1-2...

  • 无标题文章

    --如何处理android多线程安全不要堵塞UI线程,不在主线程中做耗时操作的处理,可以开启子线程去执行耗时操作 ...

网友评论

      本文标题:C# 开启子线程的四种情况

      本文链接:https://www.haomeiwen.com/subject/mpbrmttx.html