zoukankan      html  css  js  c++  java
  • Winform 界面执行耗时操作--UI卡顿假死问题

    UI卡顿假死问题

    误区1:使用不同的线程操作UI控件和耗时操作(即,跨线程操作UI控件CheckForIllegalCrossThreadCalls = false;),

    注意:此处只是为了记录......

    原始同步操作如下所示:

    private void button1_Click(object sender, EventArgs e)
            {
                Waintting waitting = new Waintting();
                waitting.Show();
                Thread.Sleep(5000);//模拟等待
                MessageBox.Show("连接数据库成功", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                waitting.BeginInvoke((Action)waitting.Close);//BeginInvoke方法返回UI线程更新UI界面控件的机制。   
            }
    

    调整后异步方式如下所示:

    private void btnWatting_Click(object sender, EventArgs e)
            {
                Waintting waitting = new Waintting();
                waitting.Show();
                Task.Factory.StartNew(() => // 将阻塞线程的操作在另外一个线程中执行,这样就不会堵塞UI线程。   
                {
                    Thread.Sleep(5000);//模拟等待
                    MessageBox.Show("连接数据库成功", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    waitting.BeginInvoke((Action)waitting.Close);//BeginInvoke方法返回UI线程更新UI界面控件的机制。   
                });
    
            }

    运行效果如下所示:

    方式二:异步回调

     private void WattingTest2_Click(object sender, EventArgs e)
            {
                Func<string> wait = () =>
                {
                    Thread.Sleep(5000);//模拟耗时操作,例如数据库操作等
                    return "abc";
                };
                wait.BeginInvoke(new AsyncCallback(result =>
                {
                    string rst = wait.EndInvoke(result);
                    this.Invoke((Action)(() => this.textBox1.AppendText(rst)));
                }), null);
            }
    

      

  • 相关阅读:
    信令基本概念
    CMMI
    关于OpenDataSource, OpenRowSet
    冒泡排序
    使用Sqlldr向oracle导入数据
    PowerDesigner生成sql和反向工程生成ER图的问题
    2021.1.4 学习总结
    12天 —— 关于生活与目标的思考【2020.8.5~2020.8.17】
    大一暑假学习总结(七)【2020.7.28~2020.8.4】
    学习:用javascript增加、删除行(转)
  • 原文地址:https://www.cnblogs.com/YYkun/p/10782653.html
Copyright © 2011-2022 走看看