• UI卡顿假死问题


    UI卡顿假死问题

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

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

    原始同步操作如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    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界面控件的机制。  
            }

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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界面控件的机制。  
                });
     
            }UI卡顿假死问题

    运行效果如下所示:

    方式二:异步回调

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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);
           }

      

    参考:https://www.cnblogs.com/YYkun/p/10782653.html

     
  • 相关阅读:
    垂直水平居中几种实现风格
    重绘(repaint)和回流(reflow)
    对象深拷贝
    PhantomJS not found on PATH
    d3.js 数据操作
    canvas 绘制圆弧
    d3.js 柱状图
    d3.js -- 比例尺 scales scaleLinear scaleBand scaleOrdinal scaleTime scaleQuantize
    d3.js -- select、selectAll
    map映射
  • 原文地址:https://www.cnblogs.com/xfweb/p/15915047.html
Copyright © 2020-2023  润新知