主线程 子线程 调用 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();
}
}
主线程 子线程 调用 ThreadId BeginInvoke调用和Invoke调用的更多相关文章
- Handler主线程子线程之间的互相通信
Handler主线程子线程之间的互相通信 package com.wyl.dansnote; import android.app.Activity; import android.os.Bundle ...
- Android ThreadUtil 线程公共类,判断是否在主线程/ 子线程执行 相关操作
前言:通常,我们写的公共的模块给别人用,但是这个模块又必须在特定的线程中执行. 比如,一个加载网络图片的的方法,需要在子线程中执行. /** * 加载网络图片 */ private void load ...
- Android 主线程和线程之间相互发送消息
通过分析Activity源码,我们知道每个Activity都有一个Looper,所以主线程在接收Message是不需要调用Looper.prepare()和Looper.loop(),但是线程是不带L ...
- C# 多线程详解 Part.02(UI 线程和子线程的互动、ProgressBar 的异步调用)
我们先来看一段运行时会抛出 InvalidOperationException 异常的代码段: private void btnThreadA_Click(object sender, ...
- 关于sleep()和interrupt()及主线程和线程
看代码 public class TestSleep { public static void main(String args[]) throws InterruptedException{ Thr ...
- 主线程——main线程
定义一个普通的类: 引用这个类,执行main方法,main方法就是一个主线程: 线程:进程的执行单元,可以理解为栈内存中的所执行的方法(除了main方法之外都是线程中的run方法)地址开辟通往cpu的 ...
- C# 多线程学习系列四之ThreadPool取消、超时子线程操作以及ManualResetEvent和AutoResetEvent信号量的使用
1.简介 虽然ThreadPool.Thread能开启子线程将一些任务交给子线程去承担,但是很多时候,因为某种原因,比如子线程发生异常.或者子线程的业务逻辑不符合我们的预期,那么这个时候我们必须关闭它 ...
- c# ThreadPool 判断子线程全部执行完毕的四种方法
1.先来看看这个 多线程编程 多线程用于数据采集时,速度明显很快,下面是基本方法,把那个auto写成采集数据方法即可. using System; using System.Collections.G ...
- C# 子线程调用主线程窗体的解决方法
摘自其他人博客,自己试过确实解决问题.(如在自己定义的线程里面给textbox赋值) 由于Windows窗体控件本质上不是线程安全的.因此如果有两个或多个线程适度操作某一控件的状态(set value ...
- Java主线程等待子线程、线程池
public class TestThread extends Thread { public void run() { System.out.println(this.getName() + &qu ...
随机推荐
- C语言使用fopen出现C4996错误解决方法
Visual Studio 不安全提醒屏蔽方法: 打开项目----项目属性---配置属性----C/C++ ----预处理器----预处理定义,添加 _CRT_SECURE_NO_DEPRECATE ...
- webgl 系列 —— 绘制一个点(版本2、版本3、版本4、版本5)
绘制一个点 我们初步认识了 webgl,本篇主要围绕绘制一个点的示例,逐步实现下面功能: 点的位置从 js 传入着色器 点的大小由 js 传入着色器 通过鼠标点击绘点 通过鼠标点击绘点,并改变点的颜色 ...
- LOJ3075 「2019 集训队互测 Day 3」组合数求和
题意: 令 \(f(j)=\sum\limits_{i=0}^{n-1}\dbinom{id}{j}\) ,对于 \(0\le j <m\) ,分别求出 \(f(j)\) .答案对 \(M\) ...
- 加载properties文件
import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java ...
- Android MVP框架 详细代码
android mvp的好处,网上一搜一大堆,相对于一开始普通的在activity中处理所有的不管是网络请求还是页面渲染,最大的好处是简洁了,废话不多说,看代码 这里网络请求使用了两种,一种是自己封装 ...
- C语言联合体(共用体)使用方法及大小计算
作者的话 本文介绍联合体的定义.如何使用联合体,包括联合体的声明.联合体变量创建.联合体内存使用,以及联合体大小的计算,最后附上用联合体判断当前环境是大端还是小端的方法. 联合体的定义 联合体,又叫共 ...
- neo4j与jdk版本【转】
根据官网的介绍,目前应该是只有这三个版本相当于主流. Version3.5 使用java1.8 Version4.0+ 官方人员说了目前只支持JDK11 Neo4j Desktop 桌面版本的已经包括 ...
- 在linux 下如何快速创建环境
首先先在你的主目录下创建一个文件 touch venv python创建环境 python3 -m venv venv 创建虚拟环境 (提示:当你有错找不到的时候可以重新创建一个环境) source ...
- 使用源码编译安装PHP7
使用源码编译安装PHP7 2015年6月11日,PHP官网发布消息,正式公开发布PHP7第一版的alpha版本. PHP7特性: PHP 7.0.0 Alpha 1使用新版的ZendEngine引擎, ...
- IDEA的常用快捷键和文档注释
IDEA的常用快捷键 Alt + 回车 导入包,自动修正 Ctrl + N 查找类 Ctrl + Shift + N 查找文件 Ctrl + Alt + N 格式化代码 Ctrl + Alt + O ...