C# 无意间写了一段线程死锁的代码
源码如下:
private void action_Click(object sender, RoutedEventArgs e){Task t = new Task(() =>{for (int i = 0; i < 10; i++){Thread.Sleep(1000);this.Dispatcher.Invoke(() =>{lblStr.Content = i.ToString();});manualResetEvent.Set();Console.WriteLine(Thread.CurrentThread.ManagedThreadId);}});t.Start();t.Wait();MessageBox.Show("123");}
正常屏蔽掉t.Wait();时,点击按钮,界面label会显示1到9,间隔1秒,
但是加上 t.Wait();直接就卡这里了。
修改为用ManualResetEvent等待,也是一样的效果
ManualResetEvent manualResetEvent = new ManualResetEvent(false);private void action_Click(object sender, RoutedEventArgs e){Task t = new Task(() =>{for (int i = 0; i < 10; i++){Thread.Sleep(1000);this.Dispatcher.Invoke(() =>{lblStr.Content = i.ToString();});manualResetEvent.Set();}});t.Start();//t.Wait();manualResetEvent.WaitOne();MessageBox.Show("123");}
然后在群里请教了几位大佬,大佬说是死锁了,指导用async和await去做
private void action_Click(object sender, RoutedEventArgs e){TaskTest();}public async void TaskTest(){await Task.Run(() =>{for (int i = 0; i < 10; i++){Thread.Sleep(1000);this.Dispatcher.Invoke(() =>{lblStr.Content = i.ToString();});}});MessageBox.Show("123");}
亲测,可以正常工作。
在此特别感谢七里听香和林德桢二位大佬的指点!
想进技术交流群的加微信zls20210502(可以扫描下方二维码),这里没有套路,没有广告,只为打造纯净的技术交流群,(想进群捣乱打广告的免加,会有技术考核,别白费心思)
C# 无意间写了一段线程死锁的代码相关推荐
- 用C++写的一段电话录音程序代码
用C++写的一段电话录音程序代码 //--------------------------------------------------------------------------- #incl ...
- 用java代码怎样打开网址_写了一段打开网页java代码报错: 求大神解救
报错内容:Exceptioninthread"main"org.openqa.selenium.WebDriverException:Unabletobindtolockingpo ...
- iOS之深入探究多线程实现、线程安全和线程死锁
一.线程与进程 ① 线程与进程的定义 线程 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行: 进程要想执行任务,必须得有线程,进程至少要有一条线程: 程序启动会默认开启一条线程,这条线程被 ...
- java线程死锁 cpu 100%_一文学会Java死锁和CPU 100% 问题的排查技巧
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开 工欲善其事,必先利其器 00 本文简介 作为一名搞技术的程序猿或者是攻城狮,想必你应该是对下面这两个问题有所了解,说不定你在 ...
- Map集合 File类 递归 序列化 常用类 进程线程 死锁
一.Map集合 将键映射到值得对象,键得值不能重复,一个键可以对应最少一个值. Map接口下的封装好得实现类 –|HashMap –|TreeMap 1.Map接口下的方法 增://将指定得值与该映射 ...
- java线程死锁 cpu 100%_Java死锁排查和Java CPU 100% 排查的步骤整理
工欲善其事,必先利其器 简介 本篇整理两个排查问题的简单技巧,一个是java死锁排查,这个一般在面试的时会问到,如果没有写多线程的话,实际中遇到的机会不多:第二个是java cpu 100%排查,这个 ...
- 网络瓶颈、线程死锁、内存泄露溢出、栈堆、ajax
网络瓶颈:网络传输性能及稳定性的一些相关元素 线程死锁:多个线程因竞争资源造成的一种僵局 下面我们通过一些实例来说明死锁现象. 先看生活中的一个实例,2个人一起吃饭但是只有一双筷子,2人轮流吃(同时拥 ...
- linux系统如何查看是否是线程死锁,多线程中如何使用gdb精确定位死锁问题
本文转载自微信公众号「程序喵大人」,作者程序喵大人 .转载本文请联系程序喵大人公众号. 在多线程开发过程中很多人应该都会遇到死锁问题,死锁问题也是面试过程中经常被问到的问题,这里介绍在c++中如何使用 ...
- 只因写了一段爬虫,公司200多人被抓 ?
"一个程序员写了个爬虫程序,整个公司200多人被端了." "不可能吧!" 刚从朋友听到这个消息的时候,我有点不太相信,做为一名程序员来讲,谁还没有写过几段爬虫呢 ...
最新文章
- 2021-03-26习题4-7 最大公约数和最小公倍数 (15 分)
- 面了一个47的程序员,我很慌...
- 个人喜欢的关于模式识别、机器学习、推荐系统、图像特征、深度学习、数值计算、目标跟踪等方面个人主页及博客
- Git 什么时候用什么指令
- yii2 mysql_Yii2 数据库操作汇总
- MyEclipse 10优化技巧
- 行先知 为您的办公室管理提供方便
- AI释放数字经济潜能!思谋科技受邀出席2021全球数字经济大会
- JS逻辑运算符——短路逻辑
- ubantu下清除项目缓存的方法
- C/C++ 笔试、面试题目大汇总收藏(上)
- 四、数组定义/冒泡排序的理论/什么是方法
- 感量越大抑制频率约低_EDA365:开关电源 LC 滤波器设计
- Guthrie QA-CAD2019(CAD绘图修订管理工具)A.04中文版
- B站喷子脚本,bilibili喷人
- raptor的基本符号有_Raptor运算符号、函数、子过程介绍大全
- ENVI中使用水体指数法NDWI提取水体
- 传奇游戏架设与M2修改常见问题收集(大合集)
- 蓝牙模块的5大应用场景
- 全网最全的云原生存储 OpenEBS 使用指南
热门文章
- java中想要保留2位小数_java使double保留两位小数的多方法 java保留两位小数
- java数据结构与算法_清华大学出版社-图书详情-《数据结构与算法分析(Java版)》...
- 2d访问冲突_Light | 基于环形分隔微镜阵列的高速随机访问轴向聚焦系统
- Lie to me不错
- Microsoft Teams的Meet Now功能
- 如何还原桌面图标_如何为Windows 10桌面图标还原或更改文本的默认外观?
- mysql 面试知识点笔记(七)RR如何避免幻读及非阻塞读、范式
- Install Odoo 11 on CentOS 7
- pta l2-6(树的遍历)
- 常见的js算法面试题收集,es6实现