为winform程序注册闪屏(等待窗体)

本文介绍了一种使用 C# 实现闪屏窗体的方法。通过创建专用的闪屏窗体,并利用多线程技术,在应用程序启动时展示闪屏效果。文中提供了具体的代码示例,包括如何在需要时显示和关闭闪屏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来张图片

2009112410293352.png

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

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

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

2  异步执行方法

3  异步线程

我用的第三种

1先做一个闪屏窗体

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

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

ContractedBlock.gifExpandedBlockStart.gifCode
        /// <summary>
        
/// 显示闪屏
        
/// </summary>
        public static void ShowFlashForm()
        {

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

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

            }
        }


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

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

注意t.Join()是必须的

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

 

11.25晨修改了此文:

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

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

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

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

ContractedBlock.gif ExpandedBlockStart.gif 代码

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

 12.10晨修改此文:

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

ContractedBlock.gif ExpandedBlockStart.gif 代码

   
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();
}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值