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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM