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();

}

}

主线程 子线程 调用 ThreadId BeginInvoke调用和Invoke调用的更多相关文章

  1. Handler主线程子线程之间的互相通信

    Handler主线程子线程之间的互相通信 package com.wyl.dansnote; import android.app.Activity; import android.os.Bundle ...

  2. Android ThreadUtil 线程公共类,判断是否在主线程/ 子线程执行 相关操作

    前言:通常,我们写的公共的模块给别人用,但是这个模块又必须在特定的线程中执行. 比如,一个加载网络图片的的方法,需要在子线程中执行. /** * 加载网络图片 */ private void load ...

  3. Android 主线程和线程之间相互发送消息

    通过分析Activity源码,我们知道每个Activity都有一个Looper,所以主线程在接收Message是不需要调用Looper.prepare()和Looper.loop(),但是线程是不带L ...

  4. C# 多线程详解 Part.02(UI 线程和子线程的互动、ProgressBar 的异步调用)

           我们先来看一段运行时会抛出 InvalidOperationException 异常的代码段: private void btnThreadA_Click(object sender, ...

  5. 关于sleep()和interrupt()及主线程和线程

    看代码 public class TestSleep { public static void main(String args[]) throws InterruptedException{ Thr ...

  6. 主线程——main线程

    定义一个普通的类: 引用这个类,执行main方法,main方法就是一个主线程: 线程:进程的执行单元,可以理解为栈内存中的所执行的方法(除了main方法之外都是线程中的run方法)地址开辟通往cpu的 ...

  7. C# 多线程学习系列四之ThreadPool取消、超时子线程操作以及ManualResetEvent和AutoResetEvent信号量的使用

    1.简介 虽然ThreadPool.Thread能开启子线程将一些任务交给子线程去承担,但是很多时候,因为某种原因,比如子线程发生异常.或者子线程的业务逻辑不符合我们的预期,那么这个时候我们必须关闭它 ...

  8. c# ThreadPool 判断子线程全部执行完毕的四种方法

    1.先来看看这个 多线程编程 多线程用于数据采集时,速度明显很快,下面是基本方法,把那个auto写成采集数据方法即可. using System; using System.Collections.G ...

  9. C# 子线程调用主线程窗体的解决方法

    摘自其他人博客,自己试过确实解决问题.(如在自己定义的线程里面给textbox赋值) 由于Windows窗体控件本质上不是线程安全的.因此如果有两个或多个线程适度操作某一控件的状态(set value ...

  10. Java主线程等待子线程、线程池

    public class TestThread extends Thread { public void run() { System.out.println(this.getName() + &qu ...

随机推荐

  1. dvgis计算两点间距离的问题

    先贴一段代码,是dvgis里的distance.js源码,dvgis是cesium的二次封装,可以参考参考: 1import{Cesium}from'@dc-modules/namespace' 2i ...

  2. Roadblocks

    poj3255 题目: Bessie has moved to a small farm and sometimes enjoys returning to visit one of her best ...

  3. C#/JS 压缩到指定大小的图片 (内存不足问题修改)

    //因为浏览器安全问题,无法获取上传图片地址,需要先存一遍然后再获取地址作参数上传 var des = CompressImage(@"C:\Users\PC\Pictures\测试\165 ...

  4. vue 获取select选中的当前option所在对象的各种值

  5. Python 常用笔记

    记录 http://blog.sina.com.cn/s/blog_73b339390102yoio.html PE:市盈率 = 股价 / 每股盈利 PEG:(市盈率相对盈利增长比率/市盈增长比率) ...

  6. VMware-安装rpm包出现警告:tigervnc-1.1.0-24.el6.x86_64.

    警告:tigervnc-1.1.0-24.el6.x86_64. 解决方法:rpm -ivh tigervnc-1.1.0-24.el6.x86_64.rpm --force --nodeps --n ...

  7. 区块链leveldb数据库安装

    一.首先,需要在电脑上安装boost库. 下载地址在这里,下载压缩包之后解压,Index of main/release/1.79.0/source. 解压完成后在解压好的文件夹里面进入cmd,之后运 ...

  8. JQUERY动态的修改<div>样式

    首先需要引入JQUERY <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"> & ...

  9. 自定义Lock实现

    1 package com.wyt.lock.test; 2 3 import java.util.concurrent.LinkedBlockingQueue; 4 import java.util ...

  10. 【SSO单点系列】(5):CAS4.0 之JDBC

    deployerConfigContext.xml 修改对应添加以下代码 <bean id="SearchModeSearchDatabaseAuthenticationHandler ...