C#控制台与窗体异步调用线程ID输出不一样

图片说明图片说明

窗体程序在调用GetStringAsync之后的方法是在主线程(线程ID:1)中运行的与前面的方法线程ID一致

而控制台程序在调用GetStringAsync之后的方法在子线程(线程ID:9)中运行,与前面方法线程ID(主线程1)不一致

这是为什么?

1个回答

GUI 应用运行的时候有默认的 SynchronizationContext(同步上下文)。在异步操作结束的时候, 后续步骤的回调被交给该上下文,以让窗口处理完当前所有消息后执行该回调。这样你会看到异步操作前后都是在该窗口所在的(主)线程上。然而控制台应用并没有默认的 SC。在这种情况下,异步操作结束后回调被交给默认的 TaskScheduler 处理,而默认的 TS 就是调用线程池。于是前后都是在不同的线程上。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于c#控制台与窗体的问题

vs在控制台中如何调用窗体,窗体和控制台是同一个项目里面的,新人一个,求大神解答

c#调用控制台程序的问题

一个控制台程序,单片机插上usb后,他会读取它的序列号,然后读完,让你输入新的序列号,回车后,他就会写入,然后报成功,之后该程序会再一次读取序列号,然后按任意健退出。现在的问题是,我调用控制台程序后,也确实重定向输入输出listbox不显示任何内容,而如果把usb 拔了,控制台会说reading failed ,listbox 也会显示这样的内容,这究竟是什么问题呢

窗体程序调用别人动态库成功,控制台应用程序不成功

C#调用别人的动态库,用窗体程序调用成功 用控制台应用程序调用不成功

C#多线程异步线程监控的问题

我现在除主线程外又写了一个异步线程A 但是我主线程往下执行时,会有一程序需要在这个异步线程完成后才能继续执行, 我现在想写一个异步线程B,来实时监控线程A的执行状态,当线程A执行完后返回true 来让主线程继续执行 请大神帮忙给组织下逻辑

c# winform 多线程调用信息窗体

想做一个多线程任务中的信息提示窗体。即在执行任务的过程中,如果一个线程需要向外界输出信息,那么就显示该信息窗体,并在窗体上显示信息内容,可以点击一个按钮关闭该窗体。如果其中一个线程调用了该窗体显示信息后没有关闭,其他线程调用该窗体时,则在原信息窗体上补充显示新的信息。 请各位大虾出手相助!

关于C#异步多线程编写时插入新线程的问题

如题,C#环境下,遇到问题如下,**假设我现在执行的线程依次为pro1,2,3,这时候我通过窗体控件新建了线程pro4并且想让他在pro3后运行(插入PRO4时PRO3未结束)请问该如何处理?** 具体解释: 我的线程创建函数在timealgorithm()方法中,会依次创建线程 整体处于go按钮的点击触发方法中,如下代码: ```private void go_Click(object sender, EventArgs e) { ... while (judgeall(finish) == false) { timealgorithm(); } ... //here }``` 如果我在here处添加了字符回显于richtestbox控件,他会在线程开始之前立刻显示 (ps. **所以顺带求问如何监控多个重名线程状态是否结束**,我是在一个循环里创建线程,创建代码如下: ```Thread pro = new Thread(new ParameterizedThreadStart(proin[x].Threadbuild)); pro.Start(timet);``` ) 我个人由于基础是C语言,开始考虑使用死循环解决,用一个按钮结束循环,但是学习C#发现按钮触发方法中死循环会直接卡死框体,故求问解决方法

关于C#异步多线程编写时准确传参的问题

如题,如何做到在多个带参数线程依次执行时传参准确,我的具体情况如下: 线程执行函数中带有参数dotime,同时为保证异步顺次执行,使用了信号量,代码为 ```public class proinformation { ... public int dotime; ... public async void Threadbuild() { await slim.WaitAsync(); ... Thread.Sleep(dotime * 1000); ... slim.Release(); } }``` 以上封装在一个类中,在窗体控件Form类中,有触发函数 ```proin[x].dotime = proin[x].lesstime; pro = new Thread(proin[x].Threadbuild); pro.Start();``` 如果X=1,2,3,相当于创建了3个进程,其dotime参数假设为2,4,5,但在我实际操作过程中发现问题 即本来应该是执行2S,4S,5S的进程的实际执行情况为5S,5S,5S,即重复最后一次执行 我个人认为原因可能在于传参时覆盖了前一参数,故有上述问题,我该如何准确传参?

c#窗体程序怎么调用cmd实现tesseract扫描功能

我想通过c#窗体调用cmd实现tesseract扫描功能,有哪位大神指点一下,最好给个原码,非常感谢

C#主窗体关闭时如何结束子线程

我有一个子线程在执行一些数据通讯的工作,我需要在主窗口关闭的时候结束这个子线程。但我不能用Abort()方法强行结束它,因为强行断开通讯可能产生一些问题。我只能设置标识量让它正常结束。我需要等待它结束后才关闭窗口,但我不能在窗体的Cosing事件里使用Join事件阻塞主线程,因为子线程里更新界面的工作需要Invoke到主线程里执行,阻塞主线程会导致子线程也被阻塞无法结束。这种情况怎么解决。

C#子窗体调用父窗体的事件

父窗体是wpf界面 子窗体是winform界面 请问如何子窗体调用父窗体的事件,进行刷新子窗体的数据 因为我用的是页面传值,所以必须子窗体调用父窗体的事件,子窗体才能刷新值

c#windows窗体中多线程问题

我是要随机在窗体中使某个button的visible为true的,可是老是出现“线程间操作无效: 从不是创建控件“button12”的线程访问它”。我是新手,所以请各位大神尽量说得浅显一些。

c#如何跨窗体调用非静态函数,获取另外窗体的textbox值?

# form1代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.OleDb; using WeifenLuo.WinFormsUI.Docking; namespace KCTan { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2.GetModel(); textBox1.Text = Form2.str; } private void Form1_Load(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.Show(dockPanel1); f2.DockTo(dockPanel1, DockStyle.Fill); } } } #form2代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using WeifenLuo.WinFormsUI.Docking; namespace KCTan { public partial class Form2 : DockContent { public Form2() { InitializeComponent(); } public static String str = ""; //在窗体类里定义静态变量 public void GetValue() { str = textBox1.Text; } public static void GetModel() { Form2 GM = new Form2(); GM.GetValue(); } } } ![![图片说明](https://img-ask.csdn.net/upload/201706/08/1496909936_42054.png)图片说明](https://img-ask.csdn.net/upload/201706/08/1496909925_378418.png)

VS2015调试C#控制台程序不能生成exe

vs2015在调试C#控制台应用程序是不能生成exe,但是在调试C++控制台应用程序时一切正常 调试的程序 ![图片说明](https://img-ask.csdn.net/upload/201609/02/1472830451_723835.png) 出现的错误 ![图片说明](https://img-ask.csdn.net/upload/201609/02/1472830503_469233.png)

C#控制台程序怎么发布

现在写了一个控制台程序,需要每天在服务器上定时运行,现在控制台项目写完了,可是怎么打包发布到服务器上?是不是打包发布完后就一个.exe可执行文件?

C#控制台程序如何实现人为的按空格键暂停

C#控制台程序,我想实现的功能是,按空格键程序暂停(注意,是人为的按空格键,不是Console.ReadKey()),当再一次按空格键时,程序又继续运行. 举个例子 string temp=null; for(int i=0;i<=100000;i++) { temp+=i; } 比如循环到i=100时,我人为的按下了空格键,这时需要程序暂停. 当我再次按下空格键时,程序将会接着执行,从i=101开始执行

项目赏析:21点游戏 利用C#制作 控制台小游戏

# 21点功能分析 功能点 ****1. 初始化界面 玩家(游戏几个人玩)(2-5) 属性:名字 ,钱 2. 随机发牌功能 3. 追加赌注 4. 叫牌 5. 停牌 6. 查看输赢 7. 是否继续 8. 计算牌的点数 9. show牌 10.自动发牌(庄家点数《17,) 11.重新开始游戏 12.游戏说明 要求: 1:用visual studio 2:C#控制台 3:不要求太好,代码简单易懂就行 4:本人大一

怎样写一个c#控制台程序

怎样用c#写一个控制台程序,要求在控制台输入一个日期,计算下一天日期并输出。若无效,则输出无效![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)哪位大佬帮个忙![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)

请教C#窗体程序方法的调用并输出返回结果

public void f(string command) { “中间省略了一些!” object[] cmdline = { "cmd /c" + command, "c:\\", null, ProcessId }; Object str = classInstance.InvokeMethod("Create", cmdline);//调用执行命令的方法 } 一个窗程序,对方法的调用输出还不是很透彻,,怎样在button按钮中写测试输出结果呢

C# 用FileStream.WriteAsync 异步读文件 调用线程还是被阻塞了。

在用FileStream WriteAsync方法(BeginWrite方法也是一样)的异步写文件时、 如下代码。实际上调用这段代码的时候,还是被阻塞了。 ``` FileStream stream = new FileStream("in.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, 1024, FileOptions.Asynchronous); byte[] byteData = new byte[80961024 * 4]; Task task = stream.WriteAsync(byteData, 0, byteData.Length); ``` 如果把这个FileStream绑定到一个StreamWriter上,用StreamWriter的WriteAsync方法倒是能异步,不会阻塞。 ``` FileStream stream = new FileStream("in.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, 1024, FileOptions.Asynchronous); char[] byteData = new char[80961024 * 4]; var sw = new StreamWriter(stream); Task task = sw.WriteAsync(byteData, 0, byteData.Length); ``` 求大神解惑

C/C++学习指南全套教程

C/C++学习的全套教程,从基本语法,基本原理,到界面开发、网络开发、Linux开发、安全算法,应用尽用。由毕业于清华大学的业内人士执课,为C/C++编程爱好者的教程。

定量遥感中文版 梁顺林著 范闻捷译

这是梁顺林的定量遥感的中文版,由范闻捷等翻译的,是电子版PDF,解决了大家看英文费时费事的问题,希望大家下载看看,一定会有帮助的

YOLOv3目标检测实战:训练自己的数据集

YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。本课程将手把手地教大家使用labelImg标注和使用YOLOv3训练自己的数据集。课程分为三个小项目:足球目标检测(单目标检测)、梅西目标检测(单目标检测)、足球和梅西同时目标检测(两目标检测)。 本课程的YOLOv3使用Darknet,在Ubuntu系统上做项目演示。包括:安装Darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 Darknet是使用C语言实现的轻型开源深度学习框架,依赖少,可移植性好,值得深入探究。 除本课程《YOLOv3目标检测实战:训练自己的数据集》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括: 《YOLOv3目标检测实战:交通标志识别》 《YOLOv3目标检测:原理与源码解析》 《YOLOv3目标检测:网络模型改进方法》 敬请关注并选择学习!

sql语句 异常 Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your

在我们开发的工程中,有时候会报 [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ------ 这种异常 不用多想,肯定是我们的sql语句出现问题,下面...

浪潮集团 往年的软件类 笔试题 比较详细的哦

浪潮集团 往年的软件类 笔试题 比较详细的哦

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

I2c串口通信实现加速度传感器和FPGA的交流

此代码能实现加速度传感器与FPGA之间的交流,从而测出运动物体的加速度。

Python可以这样学(第一季:Python内功修炼)

董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则表达式应用、面向对象编程、文本文件与二进制文件操作、目录操作与系统运维、异常处理结构。

微信公众平台开发入门

本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

eclipseme 1.7.9

eclipse 出了新的eclipseme插件,官方有下载,但特慢,我都下了大半天(可能自己网速差)。有急需要的朋友可以下哦。。。

Spring Boot -01- 快速入门篇(图文教程)

Spring Boot -01- 快速入门篇 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到【慕课网】手机 app,去找【Spring Boot 2.0 深度实践】的课程,令人开心的是,课程完全免费! 什么是 Spring Boot? Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot...

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

最简单的倍频verilog程序(Quartus II)

一个工程文件 几段简单的代码 一个输入一个输出(50Mhz倍频到100Mhz)

计算机组成原理实验教程

西北工业大学计算机组成原理实验课唐都仪器实验帮助,同实验指导书。分为运算器,存储器,控制器,模型计算机,输入输出系统5个章节

4小时玩转微信小程序——基础入门与微信支付实战

这是一个门针对零基础学员学习微信小程序开发的视频教学课程。课程采用腾讯官方文档作为教程的唯一技术资料来源。杜绝网络上质量良莠不齐的资料给学员学习带来的障碍。 视频课程按照开发工具的下载、安装、使用、程序结构、视图层、逻辑层、微信小程序等几个部分组织课程,详细讲解整个小程序的开发过程

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

基于RSA通信密钥分发的加密通信

基于RSA通信密钥分发的加密通信,采用pycrypto中的RSA、AES模块实现

不同变质程度煤尘爆炸残留气体特征研究

为分析不同变质程度煤尘爆炸残留气体成分的特征规律,利用水平管道煤尘爆炸实验装置进行了贫瘦煤、肥煤、气煤、长焰煤4种不同变质程度的煤尘爆炸实验,研究了不同变质程度煤尘爆炸后气体残留物含量的差异,并对气体

设计模式(JAVA语言实现)--20种设计模式附带源码

课程亮点: 课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点 课程内容: 工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、原型模型、代理模式、单例模式、适配器模式 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式 课程特色: 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 笔记以超链接形式让知识点关联起来,形式知识体系 采用先概念后实例再应用方式,知识点深入浅出 提供授课内容笔记作为课后复习以及工作备查工具 部分图表(电脑PC端查看):

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

软件测试2小时入门

本课程内容系统、全面、简洁、通俗易懂,通过2个多小时的介绍,让大家对软件测试有个系统的理解和认识,具备基本的软件测试理论基础。 主要内容分为5个部分: 1 软件测试概述,了解测试是什么、测试的对象、原则、流程、方法、模型;&nbsp; 2.常用的黑盒测试用例设计方法及示例演示;&nbsp; 3 常用白盒测试用例设计方法及示例演示;&nbsp; 4.自动化测试优缺点、使用范围及示例‘;&nbsp; 5.测试经验谈。

几率大的Redis面试题(含答案)

本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Red...

手把手实现Java图书管理系统(附源码)

【超实用课程内容】 本课程演示的是一套基于Java的SSM框架实现的图书管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群。详细介绍了图书管理系统的实现,包括:环境搭建、系统业务、技术实现、项目运行、功能演示、系统扩展等,以通俗易懂的方式,手把手的带你从零开始运行本套图书管理系统,该项目附带全部源码可作为毕设使用。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/27513 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程2年有效观看时长,大家可以抓紧时间学习后一起讨论哦~ 【学员专享增值服务】 源码开放 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化

jsp+servlet入门项目实例

jsp+servlet实现班级信息管理项目

winfrom中嵌套html,跟html的交互

winfrom中嵌套html,跟html的交互,源码就在里面一看就懂,很简单

Java面试题大全(2020版)

发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environ...

python实现数字水印添加与提取及鲁棒性测试(GUI,基于DCT,含测试图片)

由python写的GUI,可以实现数字水印的添加与提取,提取是根据添加系数的相关性,实现了盲提取。含有两种攻击测试方法(高斯低通滤波、高斯白噪声)。基于python2.7,watermark.py为主

Xshell6完美破解版,亲测可用

Xshell6破解版,亲测可用,分享给大家。直接解压即可使用

你连存活到JDK8中著名的Bug都不知道,我怎么敢给你加薪

CopyOnWriteArrayList.java和ArrayList.java,这2个类的构造函数,注释中有一句话 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public ArrayList(Collection&lt;? ...

相关热词 c# 不能序列化继承类 c# char* 调用 c# 开发dll模板 c#添加控件到工具箱 c#控制台组合数 编程计算猴子吃桃问题c# c# wpf 背景透明 随机抽取号码软件c# c# 开发环境 c# 属性和字段
立即提问