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. ps抠图小技巧

    1.背景橡皮擦工具 适合分离单一背景. 中括号键可以调整大小. 2.调整边缘抠图(也叫选择并遮住) 适合扣毛发丝. 套索工具框选出大概: 点击选择并遮住后出来一个面板: 视图选择叠加,输出设置勾上净化 ...

  2. Spring Boot学习笔记(一)----概要与入门

    本文来自博客园,作者:{张果},转载请注明原文链接:{SpringBoot学习笔记(一)--SpringBoot概要与快速入门} 一.Spring Boot概要 没有Spring Boot开发项目时各 ...

  3. Git基础操作及协作流程

    一整套流程帮你实践整个 Git 操作基础流程. 来源:https://docs.microsoft.com/zh-cn/learn/paths/intro-to-vc-git/ Git 介绍 配置 G ...

  4. yarn的基础语法:yarn安装完vue cli3后提示不是内部命令

    : 第一步:安装nodejs: 第二步:全局安装vue-cli 解决方案: 全局搜索vue.cmd 将vue.cmd所在的路径添加到环境变量Path后面.再执行vue -V即可.

  5. 初始化安装后 Nacos 动态路由配置不生效

    一.问题描述 1.每次初始化安装整套项目,包括安装 Nacos 和其他服务还有mysql,redis等其他中间件,安装后 Nacos 获取不到 nacos 路由信息(包括后续新写入动态路由配置)!只有 ...

  6. 苹果iPhone 日历查询功能异常

    2022年底苹果发布了IOS16.2版本系统,此时间段内所有升级的用户都将会出现日历查询功能失效,字符错乱等诸多问题. 与客服沟通后告知,日历记录内容查询是没有时间限制的,可以无限期查询全部内容,于是 ...

  7. SAP NOTE 489676 VF188异常

    解决方案 VOFM->复制请求->出具发票单据(B) 新建999例程

  8. Vue中如何实现在线预览word文件、excel文件

    一.查看word 1.引用mammoth.js (1)安装 npm install --save mammoth 1 npm install --save mammoth (2)引入import ma ...

  9. (2) 使用phpstudy 实现局域网内远程访问本地ThreeJS示例

    1 下载phpStudy  作为本地开发服务器 hpStudy下载后解压安装.安装完成后启动服务.如下: 2 打开phpStudy的安装目录,进入到安装目录的   PHPTutorial \  WWW ...

  10. Redis入门级简单安装使用

      最近突然就想学一下Redis,于是就各种找教程,前两天实际操作了一下,也不是想象中的很难 但是今天想写一个使用Redis的demo,突然就不会使用Redis了,在网上也是查找了半天,还是想起来了点 ...