溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C# 中怎么創(chuàng)建一個多線程窗體

發(fā)布時間:2021-07-07 15:44:44 來源:億速云 閱讀:262 作者:Leah 欄目:編程語言

C# 中怎么創(chuàng)建一個多線程窗體,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

一、多線程中創(chuàng)建等待窗體

   在winform程序開發(fā)中,計算機經(jīng)常會執(zhí)行一些比較耗時的任務(wù),如大量數(shù)據(jù)的查詢操作、較為復(fù)雜的業(yè)務(wù)處理等,這些任務(wù)往往需要耗時幾秒到幾十秒鐘的時間,在這些任務(wù)執(zhí)行期間winform程序窗體不再響應(yīng)任何鼠標(biāo)和鍵盤事件,出現(xiàn)假死狀態(tài),用戶體驗很差。

  一個比較好的解決辦法是,在這些任務(wù)執(zhí)行期間在界面前端顯示一個等待窗體,告訴用戶任務(wù)正在執(zhí)行中。

1.1 開發(fā)等待窗體

C# 中怎么創(chuàng)建一個多線程窗體

窗體中有一個PictureBox控件和兩個Lable控件,PictureBox控件的Image屬性為一張動態(tài)圖片。

  等待窗體源碼

1.2 提供訪問等待窗體的接口

編寫類WaitFormService

C# 中怎么創(chuàng)建一個多線程窗體

復(fù)制代碼  

using System;using System.Collections.Generic;using System.Text;using System.Threading;using System.Windows.Forms;namespace NavManager.Utils
{/// <summary>/// Using Singleton Design Pattern/// </summary>public class WaitFormService
    {public static void CreateWaitForm()
        {
            WaitFormService.Instance.CreateForm();
        }public static void CloseWaitForm()
        {
            WaitFormService.Instance.CloseForm();
        }public static void SetWaitFormCaption(string text)
        {
            WaitFormService.Instance.SetFormCaption(text);
        }private static WaitFormService _instance;private static readonly Object syncLock = new Object();public static WaitFormService Instance
        {get 
            {if (WaitFormService._instance == null)
                {lock (syncLock)
                    {if (WaitFormService._instance == null)
                        {
                            WaitFormService._instance = new WaitFormService();
                        }
                    }
                }return WaitFormService._instance;
            }
        }private WaitFormService()
        {
        }private Thread waitThread;private WaitForm waitForm;public void CreateForm()
        {if (waitThread != null)
            {try{
                    waitThread.Abort();
                }catch (Exception)
                {
                }
            }

            waitThread = new Thread(new ThreadStart(delegate()
            {
                waitForm = new WaitForm();
                Application.Run(waitForm);
            }));
            waitThread.Start();
        }public void CloseForm()
        {if (waitThread != null)
            {try{
                    waitThread.Abort();
                }catch (Exception)
                {
                }
            }
        }public void SetFormCaption(string text)
        {if (waitForm != null)
            {try{
                    waitForm.SetText(text);
                }catch (Exception)
                {
                }
            }
        }

    }
}

1.3 使用WaitFormService提供的接口

try{
        WaitFormService.CreateWaitForm();
        Assembly asmb = Assembly.GetExecutingAssembly();
        Object obj = asmb.CreateInstance(className);
        Form frm = obj as Form;this.ShowMenu(frm);
        WaitFormService.CloseWaitForm();
    }catch (Exception ex)
    {
        WaitFormService.CloseWaitForm();
    }

看完上述內(nèi)容,你們掌握C# 中怎么創(chuàng)建一個多線程窗體的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI