主线程 子线程 调用 ThreadId BeginInvoke调用和Invoke调用
BeginInvoke是异步线程执行
class Program
{
static int TakeWhile() {
int threadid = Thread.CurrentThread.ManagedThreadId;
Console.WriteLine("子线程ID:"+threadid);//每次运行不一样 测试为6
Thread.Sleep(2000);
return 5;
}
static void Main(string[] args)
{
int threadmain = Thread.CurrentThread.ManagedThreadId;
Console.WriteLine("主线程ID:" + threadmain);//每次运行不一样 测试为8
Func<int> f1 = TakeWhile;
IAsyncResult ar= f1.BeginInvoke(null,null);
while(!ar.IsCompleted)
{
Console.Write("...");
Thread.Sleep(1000);
}
int result=f1.EndInvoke(ar);
Console.WriteLine(result);//5 EndInvoke会返回异步回调函数的值
Console.WriteLine("结束");
Console.Read();
}
invoke 调用是同步执行 同一个线程执行
class Program
{
public static voidTakeWhile() {
int threadid = Thread.CurrentThread.ManagedThreadId;
Console.WriteLine("子线程ID:"+threadid);//每次运行不一样 测试为1
Thread.Sleep(2000);
}
static void Main(string[] args)
{
int threadmain = Thread.CurrentThread.ManagedThreadId;
// Console.WriteLine(Thread.CurrentThread.GetHashCode());当前framework中线程这个值与ManagedThreadId一致
Console.WriteLine("主线程ID:" + threadmain);//每次运行不一样 测试为1
typeof(ConsoleApplication2.Program).GetMethod("TakeWhile").Invoke(null, null);
Console.WriteLine("结束");
Console.Read();
}
}
最新文章
- Math Start!
- 038. asp.netWeb用户控件之六实现日期选择的用户控件
- [转]结合轮廓显示,实现完整的框选目标(附Demo代码)
- IOS开发: 为UIImageView添加点击事件
- CentOS 6.7安装Tomcat 7
- seq2sparse(4)之PartialVectorMergeReducer源码分析
- UESTC_秋实大哥去打工 2015 UESTC Training for Data Structures<;Problem G>;
- HDU 5805 - NanoApe Loves Sequence (BestCoder Round #86)
- Drupal7模块multiselect使用
- POJ3169差分约束系统
- Vue.js之深入浅出
- You don&#39;t know js
- AMH 5.X下安装 Flarum
- MyBatis-plus二级缓存使用
- ESP8266莫名重启或者死机问题
- 阿里云 SSL 证书 总结
- selenium 常用操作
- 【pyqtgraph】pyqtgraph-鼠标互动
- webstorm 2017激活
- git 学习小记之记住https方式推送密码