参考

一、异步委托开启线程

  Action<int, int> a = add;
a.BeginInvoke(, , null, null);//前两个是add方法的参数,后两个可以为空
Console.WriteLine("main()");
Console.ReadKey(); static void add(int a, int b)
{
Console.WriteLine(a + b);
}

如果不是开启线程,像平常一样调用的话,应该先输出7,再输出main()

二、通过thread类开启线程

            new Thread(() =>
{
DTTEST();
})
{ IsBackground = true }.Start();
new Thread(() =>
{
DTTEST();
})
{ IsBackground = true }.Start();
new Thread(() =>
{
DTTEST();
})
{ IsBackground = true }.Start(); Thread.Sleep(); static private void DTTEST()
{ Console.WriteLine($"测试并行调用{DateTime.Now}");
}

或者

            Thread thread = new Thread(() =>
{
while (true)
{
Thread.Sleep();
DTTEST();
}
});
thread.Start();

三、通过线程池开启线程

            var param = "哈哈";
ThreadPool.QueueUserWorkItem(obj =>
{
// DTTEST(param);
CallbackDemoViod(obj);
}, param);
ThreadPool.QueueUserWorkItem((o) =>
{
DTTEST(param);
}); private static void CallbackDemoViod(object obj)
{
//以下不catch异常就会导致闪退
try
{
Console.WriteLine(obj.ToString());
}
catch (Exception ex)
{ Console.WriteLine(ex);
} }
static private void DTTEST(string a)
{
try
{
Console.WriteLine(a);
}
catch (Exception ex)
{ Console.WriteLine(ex);
}
}

或者

            var param = "哈哈";
ThreadPool.QueueUserWorkItem(CallbackDemoViod, param);//这种写法方法体参数必须为object private static void CallbackDemoViod(object obj)
{
//以下不catch异常就会导致闪退
try
{
Console.WriteLine(obj.ToString());
}
catch (Exception ex)
{ Console.WriteLine(ex);
} }

或者

            var param = "哈哈";
WaitHandle[] waitHandles = new WaitHandle[]
{
new AutoResetEvent(false),
new AutoResetEvent(false),
new AutoResetEvent(false)
}; ThreadPool.QueueUserWorkItem((o) =>
{
DTTEST(param);
((AutoResetEvent)o).Set();
}, waitHandles[]);
ThreadPool.QueueUserWorkItem((o) =>
{
DTTEST(param);
((AutoResetEvent)o).Set();
}, waitHandles[]);
ThreadPool.QueueUserWorkItem((o) =>
{
DTTEST(param);
((AutoResetEvent)o).Set();
}, waitHandles[]);
WaitHandle.WaitAll(waitHandles); static private void DTTEST(string a)
{
try
{
Console.WriteLine(a);
}
catch (Exception ex)
{ Console.WriteLine(ex);
}
}

4、通过任务开启线程

4.1通过Task

             Task wt1 = Task.Run(() =>
{
DTTEST();
});
Task wt2 = Task.Run(() =>
{
DTTEST();
});
Task wt3 = Task.Run(() =>
{
DTTEST();
});
var wtasks = new Task[] { wt1, wt2, wt3 };
Task.WaitAll(wtasks); static private void DTTEST()
{ Console.WriteLine($"测试并行调用{DateTime.Now}");
}

4.2 Task.Factory.StartNew

            int val = ;

            Task.Factory.StartNew(() =>
{
MessageBox.Show("测试StartNew:无参数");
}); Task.Factory.StartNew(a =>
{
MessageBox.Show("测试StartNew:参数值" + (int)a);
}, val);

5、Invoke实现

                  Parallel.Invoke(
() =>
{
DTTEST();
},
() =>
{
DTTEST();
},
() =>
{
DTTEST();
},
() =>
{
DTTEST();
},
() =>
{
DTTEST();
}
);

参考

C# 并行线程调用的更多相关文章

  1. SpringBoot开发案例之多任务并行+线程池处理

    前言 前几篇文章着重介绍了后端服务数据库和多线程并行处理优化,并示例了改造前后的伪代码逻辑.当然了,优化是无止境的,前人栽树后人乘凉.作为我们开发者来说,既然站在了巨人的肩膀上,就要写出更加优化的程序 ...

  2. CUDA编程模型——组织并行线程2 (1D grid 1D block)

    在”组织并行编程1“中,通过组织并行线程为”2D grid 2D block“对矩阵求和,在本文中通过组织为 1D grid 1D block进行矩阵求和.一维网格和一维线程块的结构如下图: 其中,n ...

  3. 并发,并行,线程,进程,GIL锁

    1.并发和并行 并发: 同时做某些事,但是强调同一时段做多件事 如:同一路口,发生了车辆要同时通过路面的时间. 并行: 互不干扰的在同一时刻做多件事 如:同一时刻,同时有多辆车在多条车道上跑,即同时发 ...

  4. 【CUDA 基础】2.3 组织并行线程

    title: [CUDA 基础]2.3 组织并行线程 categories: CUDA Freshman tags: Thread Block Grid toc: true date: 2018-03 ...

  5. C#线程 并行线程

    第五部分 并行线程   在本节中,我们将介绍Framework 4.0新增的利用多核处理器的多线程API: 并行LINQ或PLINQ Parallel 类 任务并行性构造 并发集合 自旋锁和自旋等待 ...

  6. C# 跨线程调用控件

    在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应.  同时我们又需要在工作线程中更新UI界面上的控件, 下面介绍几种常用的方法 阅读目录 线程间操作无效 第一种办法:禁 ...

  7. 跨线程调用控件之MethodInvoker

    原文:http://www.cnblogs.com/cm8448940/archive/2008/07/10/1240045.html 使用到两个控件,一个按钮button1,一个标签label1. ...

  8. C# 跨线程调用问题

    纠结了好久,终于知道了winform和WPF的UI的跨线程调用的解决方法: winform下如果为了省事,可以直接禁用跨线程检查: Control.CheckForIllegalCrossThread ...

  9. c#中跨线程调用windows窗体控件

    c#中跨线程调用windows窗体控件解决. 我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍.首先来 ...

随机推荐

  1. 吴裕雄--天生自然PYTHON爬虫:安装配置MongoDBy和爬取天气数据并清洗保存到MongoDB中

    1.下载MongoDB 官网下载:https://www.mongodb.com/download-center#community 上面这张图选择第二个按钮 上面这张图直接Next 把bin路径添加 ...

  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:将页面元素所包含的文本内容替换为背景图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. python 开启http服务并下载文件

    Python <= 2.3python -c "import SimpleHTTPServer as s; s.test();" 8000 Python >= 2.4p ...

  4. English-Phonics

    English-Phonics 1. 音节 1.1 字组 1.2 音节概述及分类 1.3 音节的划分 2. 元音字组的自然发音 2.1 元音字母 2.2 元音字母的长音 2.3 元音字母+r 2.4 ...

  5. bzoj 2111: [ZJOI2010]Perm 排列计数

    神题... 扒自某神犇题解: http://blog.csdn.net/aarongzk/article/details/50655471 #include<bits/stdc++.h> ...

  6. rsa免密钥登陆

    #第一步 生成密钥,一路回车就行 ssh-keygen -t rsa #第二步 将密钥拷贝到目标服务器上,注意双引号 ssh-copy-id -i ~/.ssh/id_rsa.pub "ro ...

  7. 大数据篇:DolphinScheduler-1.2.0.release安装部署

    大数据篇:DolphinScheduler-1.2.0.release安装部署 1 配置jdk #查看命令 rpm -qa | grep java #删除命令 rpm -e --nodeps xxx ...

  8. Java HotSpot(TM) Client VM 与 server VM 的配置

    在Linux 6.5 下安装Elasticsearch 出现错误: JVM is using the client VM [Java HotSpot(TM) Client VM] but should ...

  9. Maven项目- Servlet的抽取和优化 java.lang.NoSuchMethodException 的解决方法

    优化servlet,减少servlet的数量,便于开发与维护.现在是一个功能一个Servlet,将其优化为一个模块一个Servlet,BaseServlet的抽取和优化,相当于在数据库中一张表对应一个 ...

  10. 嵊州普及Day4T4

    题意:求最长上升序列长度和方案数. 思路:经典DP,不需什么别的东西,加一个数组储蓄程序数即可,原题300000可能N2会有问题,但问题不大. 见代码: #include<iostream> ...