zoukankan      html  css  js  c++  java
  • Winform加载中效果

    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,显示效果如下:

    5,LoaderForm和LoadingHelper部分代码如下,ref:https://www.cnblogs.com/morewindows0/p/7107599.html

    LoaderForm:

     public partial class LoaderForm : Form
        {
            public LoaderForm()
            {
                InitializeComponent();
            }
     
            /// <summary>
            /// 关闭命令
            /// </summary>
            public void closeOrder()
            {
                if (this.InvokeRequired)
                {
                    //这里利用委托进行窗体的操作,避免跨线程调用时抛异常,后面给出具体定义
                    CONSTANTDEFINE.SetUISomeInfo UIinfo = new CONSTANTDEFINE.SetUISomeInfo(new Action(() =>
                    {
                        while (!this.IsHandleCreated)
                        {
                            ;
                        }
                        if (this.IsDisposed)
                            return;
                        if (!this.IsDisposed)
                        {
                            this.Dispose();
                        }
     
                    }));
                    this.Invoke(UIinfo);
                }
                else
                {
                    if (this.IsDisposed)
                        return;
                    if (!this.IsDisposed)
                    {
                        this.Dispose();
                    }
                }
            }
     
            private void LoaderForm_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (!this.IsDisposed)
                {
                    this.Dispose(true);
                }
     
            }
        }
        class CONSTANTDEFINE
        {
            public delegate void SetUISomeInfo();
        }

    LoadingHelper:

      public class LoadingHelper
        {
             #region 相关变量定义
           /// <summary>
           /// 定义委托进行窗口关闭
           /// </summary>
           private delegate void CloseDelegate();
           private static LoaderForm loadingForm;
           private static readonly Object syncLock = new Object();  //加锁使用
     
            #endregion
     
            //private LoadingHelper()
            //{
     
            //}
     
            /// <summary>
            /// 显示loading框
            /// </summary>
            public static void ShowLoadingScreen()
            {
                // Make sure it is only launched once.
                if (loadingForm != null)
                    return;
                Thread thread = new Thread(new ThreadStart(LoadingHelper.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 LoaderForm();
                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(LoadingHelper.CloseFormInternal));
                        }
                    }
                }
            }
     
            /// <summary>
            /// 关闭窗口,委托中使用
            /// </summary>
            private static void CloseFormInternal()
            {
     
                loadingForm.closeOrder();
                loadingForm = null;
     
            }
     
        }
  • 相关阅读:
    Vue ui创建vue-cli 3.0项目
    Vue中封装axios
    微信小程序自定义顶部导航
    linux离线安装docker
    解决websocket不能@Autowired注入问题
    springboot 连接 Access数据库
    Flex 布局教程:语法篇
    通过代码来了解下java策略模式,消除if-else
    docker下安装FastDFS
    centos7下安装docker
  • 原文地址:https://www.cnblogs.com/romanticcrystal/p/14034634.html
Copyright © 2011-2022 走看看