博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#避免WinForm窗体假死
阅读量:4658 次
发布时间:2019-06-09

本文共 752 字,大约阅读时间需要 2 分钟。

WinForm窗体在使用过程中如果因为程序等待时间太久而导致窗体本身假死无法控制,会严重影响用户的体验,这种情况大多是UI线程被耗时长的代码操作占用所致,可以新开一个线程用来完成耗时长的操作,然后再将结果返回到UI中呈现,这样就不会占用到UI线程了,也就不会假死了,涉及Control的更新需要用到BeginInvoke方法

private void button1_Click(object sender, EventArgs e){    Thread t1 = new Thread(delegate ()    {        bu1_Click();    }    );    t1.IsBackground = true; //当主线程退出时,后台线程会被CLR调用Abort()来彻底终止程序    t1.Start();}
public void bu1_Click(){    label1.BeginInvoke((MethodInvoker)delegate ()    {        label1.Text = "Fetching doc effective date...";        label1.ForeColor = Color.Red;    });    Thread.Sleep(3000);}

Control.BeginInvoke函数内的线程跟UI线程是同一个线程的,函数外的代码所在进程则是另一个t1进程,所以异步在这里体现的是Control.BeginInvoke相对于t1线程的异步,并不是相对于UI线程的异步。

更多详细知识参考

 

转载于:https://www.cnblogs.com/JTCLASSROOM/p/11171733.html

你可能感兴趣的文章
POJ 2031 Building a Space Station
查看>>
任意阶幻方(魔方矩阵)C语言实现
查看>>
织梦教程
查看>>
杭电多校 Harvest of Apples 莫队
查看>>
C/C++心得-结构体
查看>>
函数名作为参数传递
查看>>
apt-get for ubuntu 工具简介
查看>>
数值计算算法-多项式插值算法的实现与分析
查看>>
day8-异常处理与网络编程
查看>>
Python基础-time and datetime
查看>>
shell脚本练习01
查看>>
WPF图标拾取器
查看>>
通过取父级for循环的i来理解闭包,iife,匿名函数
查看>>
HDU 3374 String Problem
查看>>
数据集
查看>>
[Leetcode] unique paths ii 独特路径
查看>>
HDU 1217 Arbitrage (Floyd + SPFA判环)
查看>>
IntelliJ idea学习资源
查看>>
Django Rest Framework -解析器
查看>>
ExtJs 分组表格控件----监听
查看>>