首页 > 其他分享 >WinForm实现Loading等待界面

WinForm实现Loading等待界面

时间:2023-10-26 10:55:41浏览次数:29  
标签:Loading 界面 loadingForm void private static null public WinForm

https://blog.csdn.net/qq_36240878/article/details/84024369?spm=1001.2014.3001.5506

1、LoaderForm窗体中添加PictureBox,然后添加Loading图片

2、窗体内属性设置

StartPosition :CenterScreen在屏幕中心显示

TopMost:True置顶显示

ShowInTaskbar:False不在任务栏显示

FormBorderStyle:None不显示窗体边框和标题栏

TransparencyKey:Control颜色为Control的部分透明

BackColor:Control窗体背景颜色设为Control

3、调用:

LoadingHelper.ShowLoadingScreen();//显示
LoadingHelper.CloseForm();//关闭

4、代码部分:

LoaderForm:

using System.Drawing;
using System.Windows.Forms;

namespace LaserScanMicrometer
{
    public partial class LoadingForm : Form
    {
        public LoadingForm()
        {
            InitializeComponent();
            StartPosition   = FormStartPosition.CenterScreen;
            TopMost         = true;
            ShowInTaskbar   = false;
            FormBorderStyle = FormBorderStyle.None;
            BackColor       = Color.White;
            TransparencyKey = Color.White;
        }

        /// <summary>
        /// 关闭命令
        /// </summary>
        public void closeOrder()
        {
            if (InvokeRequired)
            {
                //这里利用委托进行窗体的操作,避免跨线程调用时抛异常,后面给出具体定义
                CONSTANTDEFINE.SetUISomeInfo UIinfo = () =>
                {
                    while (!IsHandleCreated)
                    {
                        ;
                    }

                    if (IsDisposed)
                    {
                        return;
                    }

                    if (!IsDisposed)
                    {
                        Dispose();
                    }
                };
                Invoke(UIinfo);
            }
            else
            {
                if (IsDisposed)
                {
                    return;
                }

                if (!IsDisposed)
                {
                    Dispose();
                }
            }
        }

        private void LoadingForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!IsDisposed)
            {
                Dispose(true);
            }
        }
    }

    internal class CONSTANTDEFINE
    {
        public delegate void SetUISomeInfo();
    }
}

LoadingHelper:

using System.Threading;

namespace LaserScanMicrometer
{
    public class LoadingHelper
    {
        /// <summary>
        /// 显示loading框
        /// </summary>
        public static void ShowLoadingScreen()
        {
            // Make sure it is only launched once.
            if (loadingForm != null)
            {
                return;
            }

            var thread = new Thread(ShowForm);
            thread.IsBackground = true;
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
        }

        /// <summary>
        /// 显示窗口
        /// </summary>
        private static void ShowForm()
        {
            if (loadingForm != null)
            {
                loadingForm.closeOrder();
                loadingForm = null;
            }

            loadingForm         = new LoadingForm();
            loadingForm.TopMost = true;
            loadingForm.ShowDialog();
        }

        /// <summary>
        /// 关闭窗口
        /// </summary>
        public static void CloseForm()
        {
            Thread.Sleep(50); //可能到这里线程还未起来,所以进行延时,可以确保线程起来,彻底关闭窗口
            if (loadingForm != null)
            {
                lock (syncLock)
                {
                    Thread.Sleep(50);
                    if (loadingForm != null)
                    {
                        Thread.Sleep(50); //通过三次延时,确保可以彻底关闭窗口
                        loadingForm.Invoke(new CloseDelegate(CloseFormInternal));
                    }
                }
            }
        }

        /// <summary>
        /// 关闭窗口,委托中使用
        /// </summary>
        private static void CloseFormInternal()
        {
            loadingForm.closeOrder();
            loadingForm = null;
        }

        #region 相关变量定义

        /// <summary>
        /// 定义委托进行窗口关闭
        /// </summary>
        private delegate void CloseDelegate();

        private static          LoadingForm loadingForm;
        private static readonly object      syncLock = new object(); //加锁使用

        #endregion
    }
}

 

标签:Loading,界面,loadingForm,void,private,static,null,public,WinForm
From: https://www.cnblogs.com/shieryoufeng/p/17788908.html

相关文章

  • winform控件命名
    控件命名【参考】控件命名=控件缩写前缀+变量名privateLabellblNote;privateButtonbtnOk;privateTextBoxtxtName;【参考】winform控件缩写 控件名称缩写ButtonBtnCheckBoxChkCheckedListBoxCklComboBoxCmbDateTimePickerDtpLabelLbl......
  • A piece of code for loading and caching Skeleton Animation in IO task [Cocos2dx.
    /****************************************************************************Copyright(c)2017-2018XiamenYajiSoftwareCo.,Ltd.http://www.cocos2d-x.orgPermissionisherebygranted,freeofcharge,toanypersonobtainingacopyofthissoft......
  • Qt - 主界面卡死的解决方案
    简介我们在写UI文件的时候,有很多情况下,是需要界面来处理业务中某些耗时的操作,这时候如果不处理好界面相关的逻辑的话,主界面就会卡死,这时候就需要我们上多线程了首先上业务上一个很简单的栗子比如我们的代码中有这么一个耗时的操作1//第一种耗时的操作2autofWh......
  • winform chart 入门
       usingSystem.Windows.Forms;usingSystem.Windows.Forms.DataVisualization.Charting;namespaceWindowsFormsApp1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();//网格设......
  • 界面控件开发包DevExpress v23.1.6全新发布|附高速下载
    DevExpressUniversal拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpressDashboardeXpressApp框架、适用于VisualStudio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress今年第一个重要版本v23.1正式发布,该版本拥有众多新产品和数十个具......
  • 【C#】【WinForm】MDI窗体
    MDI窗体的相关学习使用1、设置MDI父窗体 在属性中找到IsMdiContainer选项,设置为True2、添加MDI子窗体,在项目中依次选择添加->窗体,然后一直默认即可 添加后的项目目录(Form1为父窗口,Form2、Form3为子窗口) 3、在Form1.cs中,创建对应MDI子窗口的对象并调用显示出来1name......
  • 【CentOS7】启动 CentOS7 系统时卡在开机界面 7 解决办法
    【CentOS7】启动CentOS7系统时卡在开机界面7解决办法本文参考:https://www.51c51.com/danpianji/xinxi/89/73120.html目录一、问题如题二、解决步骤1.进入grub界面2.修改BIOSLegacy或UEFIBIOS模式启动的3.挂载系统根&RW读写权限4.修改/etc/selinux/config配置......
  • 安防视频监控平台EasyCVR新版(3.4)平台界面更新2.0
    视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时轮播。视频监控汇聚平台EasyCVR支持多种播放......
  • js实现在报表参数界面获取body中控件的值
     要在报表参数界面获取body中控件的值,你可以使用JavaScript来实现。下面是一个详细的介绍:1.DOM(文档对象模型):  -DOM是用于操作HTML文档的API,它允许你通过JavaScript访问和操作文档中的元素。  -在报表参数界面,你可以使用DOM来获取页面上的控件元素。2.获取控件元......
  • DevExpress WinForms地图组件 - 轻松集成地图功能到应用程序
    DevExpressWinForms地图控件允许您在WinForms应用程序中合并地图服务,您可以选择现有的地图资源,如如Bing或OpenStreetMap,或者在公司网络中创建自己的地图数据服务器。DevExpressWinForms地图控件完全支持矢量和笛卡尔坐标地图。DevExpressWinForms有180+组件和UI库,能为Windows......