您好,登錄后才能下訂單哦!
C# 中怎么創(chuàng)建一個多線程窗體,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
在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í)行中。
窗體中有一個PictureBox控件和兩個Lable控件,PictureBox控件的Image屬性為一張動態(tài)圖片。
等待窗體源碼
1.2 提供訪問等待窗體的接口
編寫類WaitFormService
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è)資訊頻道,感謝各位的閱讀!
免責(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)容。