首页 > 代码库 > C# winform窗体假死
C# winform窗体假死
C# winform窗体假死
我们经常会遇到当执行一个比较大的函数时,窗体会出现假死的现象,给用户的体验不是很好,于是我们遇到了问题,那么就必须解决,我们该如何解决呢,首先在自己的脑里画个问号,接下来我们就一起研究吧!
先分析,这个问题是如何出现的呢!为什么会出现,如何避免出现,避免不了的,如何解决等,下面我们就去解决问题吧,遇到问题不要怕,解决问题是我们成长最快的时候,曾经别人告诉我,不怕不会做,就怕想不到。那我们就进入正题吧!
窗体假死是如何出现的呢?
在调用 testc();函数时,阻塞了UI线程,所以会出现窗体假死现象。(你在吃饭就不能去买东西。)
问题找到了,接下来我们就要想如何解决呢!
思路:1.你在吃饭的时候就不能去买东西,所以我们就必须先吃完饭,再去买。(调用DoEvents函数;主动调用Application.DoEvents 会有线程安全问题。)
思路:2.我可以找个人去帮我买东西。这就是委托,委托一个人去帮你买东西。(新开一个线程)
切记:没有必要的时候,请尽可能的少用线程。线程不易控制。
方案一:调用方法:DoEvents
Application.DoEvents();
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { CheckForIllegalCrossThreadCalls = false; this.label1.Text = "aaaaa"; Application.DoEvents(); testc(); } private void testc() { for (int i = 0; i < 10; i++) { Thread.Sleep(10000); MessageBox.Show("a"); } } }
方案二:新开一个线程;
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { CheckForIllegalCrossThreadCalls = false; this.label1.Text = "aaaaa"; Thread tr = new Thread(testc); tr.Start(); } private void testc() { for (int i = 0; i < 10; i++) { Thread.Sleep(10000); MessageBox.Show("a"); } } }
C# winform窗体假死
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。