zoukankan      html  css  js  c++  java
  • C#避免WinForm窗体假死

    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://blog.csdn.net/newbie_xymt/article/details/81777675

  • 相关阅读:
    ASP.NET 5
    asp.net web api
    PowerShell 常用命令
    WinDbg
    Visual Studio Online
    asp.net authentication
    CoreOS
    解决download.msdn.microsoft.com无法正确解析而无法下载的问题
    nodejs express
    移动平台WEB前端开发技巧汇总
  • 原文地址:https://www.cnblogs.com/JTCLASSROOM/p/11171733.html
Copyright © 2011-2022 走看看