主线程 子线程 调用 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 ...
随机推荐
- dvgis计算两点间距离的问题
先贴一段代码,是dvgis里的distance.js源码,dvgis是cesium的二次封装,可以参考参考: 1import{Cesium}from'@dc-modules/namespace' 2i ...
- Roadblocks
poj3255 题目: Bessie has moved to a small farm and sometimes enjoys returning to visit one of her best ...
- C#/JS 压缩到指定大小的图片 (内存不足问题修改)
//因为浏览器安全问题,无法获取上传图片地址,需要先存一遍然后再获取地址作参数上传 var des = CompressImage(@"C:\Users\PC\Pictures\测试\165 ...
- vue 获取select选中的当前option所在对象的各种值
- Python 常用笔记
记录 http://blog.sina.com.cn/s/blog_73b339390102yoio.html PE:市盈率 = 股价 / 每股盈利 PEG:(市盈率相对盈利增长比率/市盈增长比率) ...
- 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 ...
- 区块链leveldb数据库安装
一.首先,需要在电脑上安装boost库. 下载地址在这里,下载压缩包之后解压,Index of main/release/1.79.0/source. 解压完成后在解压好的文件夹里面进入cmd,之后运 ...
- JQUERY动态的修改<div>样式
首先需要引入JQUERY <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"> & ...
- 自定义Lock实现
1 package com.wyt.lock.test; 2 3 import java.util.concurrent.LinkedBlockingQueue; 4 import java.util ...
- 【SSO单点系列】(5):CAS4.0 之JDBC
deployerConfigContext.xml 修改对应添加以下代码 <bean id="SearchModeSearchDatabaseAuthenticationHandler ...