zoukankan      html  css  js  c++  java
  • (转)为winform程序注册闪屏(等待窗体)

    原文地址:http://www.cnblogs.com/liulun/archive/2009/11/24/1609287.html

    先来张图片

    请稍候的窗体就是我要说的闪屏了

    实现这个效果有很多种办法

    1  Application.Idle +=new EventHandler(Application_Idle);

    2  异步执行方法

    3  异步线程

    我用的第三种

    1先做一个闪屏窗体

       你在上图中看到的闪屏用到了第三方控件名字叫:DevExpress

    2写一个公开的方法显示闪屏

    Code
            /// <summary>
            
    /// 显示闪屏
            
    /// </summary>
            public static void ShowFlashForm()
            {

                 object lockObject = new object();
                lock (lockObject)
                {

                   ProcessForm processForm 
    = new ProcessForm();
                   processForm.ShowDialog();

                }
            }


    3在需要闪屏的地方注册闪屏

    Code
                Thread t = new Thread(new ThreadStart(Utils.ShowFlashForm));
                t.Start();
                LoadMainForm();
                t.Abort();
                t.Join();

    注意t.Join()是必须的

    不然有报“正在终止线程”错误的可能

    11.25晨修改了此文:

    做DEMO如下:https://files.cnblogs.com/liulun/XLFlashForm.rar

    12.5中午修改了此文:
    对线程访问的方法做了并发多线程访问的限制

    12.9晚修改了此文:
    只要这两句,就可以实现以上效果

    两句中间就是你要执行的操作

    代码
    Thread t = new Thread(new ThreadStart(()=>{Application.Run(new waitForm());}));
    Application.OpenForms[
    "waitForm"].Invoke(new Action(() => { Application.OpenForms["waitForm"].Close(); }));

     12.10晨修改此文:

    以上说的都不对
    注册闪屏的工具类的最终版本如下

    代码
    private ProcessForm processForm;
    private void ShowWaitMess()
    {
    try
    {
    processForm.ShowDialog();
    }
    catch (Exception Err)
    {

    }
    }
    private void DoCloseJob()
    {
    try
    {
    if (!processForm.IsDisposed)
    {
    processForm.Close();
    }
    }
    catch (Exception Err)
    {

    }
    }
    /// <summary>
    /// 显示窗体
    /// </summary>
    /// <param name="TypeStr"></param>
    /// <param name="TypeTxt"></param>
    public void Show()
    {
    try
    {
    processForm
    = new ProcessForm();
    Thread upgradeThread
    = new Thread(new ThreadStart(ShowWaitMess));
    upgradeThread.Start();
    }
    catch (Exception ex)
    {

    }
    }
    /// <summary>
    /// 关闭窗体
    /// </summary>
    public void Close()
    {
    if (processForm.InvokeRequired)
    {
    processForm.Invoke(
    new Action(DoCloseJob));
    }
    else
    {
    DoCloseJob();
    }
    }
  • 相关阅读:
    爬虫基础 2.1 http原理
    爬虫基础 2.1 http原理
    3.29上午
    3.28
    3.27下午
    3.27上午
    3.24上午
    3.23下午
    3.23上午
    3.22上午
  • 原文地址:https://www.cnblogs.com/fcsh820/p/1853011.html
Copyright © 2011-2022 走看看