CS DevExpress程序启动(主窗体初始化优化)
在进入程序主界面时,某些情况下主界面的初始化会消耗很长时间,例如一些复杂的业务系统,可能会从服务器上下载最新的数据进行展示等等,在这种情况下,我们可以采用一个进度界面展示“系统正在加载...”,等主界面加载完之后,进度界面退出,主界面展示出来。
在Program.cs中进行操作:
实例包含三个窗体:主窗体(FrmMain)、登陆窗体(FrmLogin)、进度窗体(SplashScreen1)
using System;
using System.Windows.Forms;
using DevExpress.LookAndFeel;
using System.Threading;
using System.Reflection;
using System.Configuration; namespace MainUSL
{
static class Program
{
private static ApplicationContext context;
private static FrmMain mForm;
private static Thread oThread;
private static SplashScreen1 sForm;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
//DefaultLookAndFeel defaultLookAndFeel1 = new DefaultLookAndFeel();
//defaultLookAndFeel1.LookAndFeel.SetSkinStyle("Office 2010 Blue");
//string skinName = ConfigurationManager.AppSettings["ThemeSkin"].ToString();
//UserLookAndFeel.Default.SkinName = skinName;
UserLookAndFeel.Default.SkinName = "DevExpress Dark Style";
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN");
bool bMutexCreated = true;
using (new Mutex(true, Assembly.GetExecutingAssembly().FullName, out bMutexCreated))
{
if (!bMutexCreated)
{
DevExpress.XtraEditors.XtraMessageBox.Show("已经存在一个实例在运行!");
return;
}
FrmLogin frmLogin = new FrmLogin();
if (frmLogin.ShowDialog() == DialogResult.OK)
{
DoStartup();
}
}
//Application.Run(new FrmLogin());
//Application.Run(new FrmMain());
}
static void DoStartup()
{
try
{ sForm = new SplashScreen1();
//新建一个线程
oThread = new Thread(new ThreadStart(ShowFlash));
//设置线程级别
oThread.Priority = ThreadPriority.Lowest;
//后台线程
oThread.IsBackground = true;
//启动flash
oThread.Start();
//事件订阅(在线程结束时调用OnAppIdle方法)
Application.Idle += new EventHandler(OnAppIdle);
mForm = new FrmMain();
//Application.Run(mForm);
context = new ApplicationContext();
Application.Run(context);
}
catch (Exception e)
{
CommonOperator.ExceptionClass.RecordException(e.ToString());
Application.Exit();
}
}
/// <summary>
/// 线程结束后事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void OnAppIdle(object sender, EventArgs e)
{
try
{
if (context.MainForm == null)
{
//取消事件订阅
Application.Idle -= new EventHandler(OnAppIdle);
//标识状态
//mForm.PreLoad();
//为当前线程设置主窗体
context.MainForm = mForm;
//启动主界面
Thread.Sleep();
context.MainForm.Show();
//终止flash
oThread.Abort();
GC.Collect();
Application.DoEvents();
}
}
catch (Exception ex)
{
CommonOperator.ExceptionClass.RecordException(ex.ToString());
}
} static void ShowFlash()
{
sForm.ShowDialog();
}
}
}
CS DevExpress程序启动(主窗体初始化优化)的更多相关文章
- SpringBoot程序启动时执行初始化代码
因项目集成了Redis缓存部分数据,需要在程序启动时将数据加载到Redis中,即初始化数据到Redis. 在SpringBoot项目下,即在容器初始化完毕后执行我们自己的初始化代码. 第一步:创建实现 ...
- 获取当前进程(程序)主窗体句柄并设置wpf的父窗体为此句柄
有时候在c++调用wpf控件的时候,wpf控件想自己显示窗体,但需要设置owner属性.迂回解决办法是设置wpf的window窗体的父窗体为进程的句柄. 1.获取当前进程id int id = Pro ...
- 【转】在ASP.NET应用启动的时候初始化的几种方法
ASP.NET 4.0 之前,有两种方法:通过Global.asax 中的 Application_Start 事件启动,或者通过定义在 App_Code 文件夹中任意类中的AppInitialize ...
- WinForm 之 程序启动不显示主窗体
在 WinForm 程序启动时,不显示主窗体的实现方法主要有以下5种,第五种最简单,而且效果也不错,第四种方法也值得推荐. 实例代码如下: //隐藏窗体的方法1/5:不指定任何窗体为主窗体 //注意: ...
- 在DevExpress程序中使用SplashScreenManager控件实现启动闪屏和等待信息窗口
在我很早的WInform随笔<WinForm界面开发之"SplashScreen控件">有介绍如何使用闪屏的处理操作,不过那种是普通WInform和DevExpress ...
- MFC之窗体改动工具栏编程状态栏编程程序启动画面
1窗体外观的改动 (1)改动在CMainFrame::preCreateWindow(CREATESTRUCT& cs) 改动标题:cs.style&=FWS_ADDTOTITLE; ...
- C#WinForm窗体内Panel容器中嵌入子窗体、程序主窗体设计例子
C#WinForm父级窗体内Panel容器中嵌入子窗体.程序主窗体设计例子 在项目开发中经常遇到父级窗体嵌入子窗体所以写了一个例子程序,顺便大概划分了下界面模块和配色,不足之处还望指点 主窗体窗体采用 ...
- Windows 程序启动性能优化(先载入EXE,后载入DLL,只取有限的代码载入内存,将CPU的IP指向程序的入口点)
一.重定位链接时重定位:目标文件一般由多个节组成,编译器在编译每个目标文件时一般都是从0地址开始生成代码.当多个代码节合成一个代码段时,需要根据其在最终代码段中的位置做出调整.同时,链接器需要对已经解 ...
- c# 运行大运算程序主窗体卡掉的解决
写了一个运算过滤大文本的程序, 其中方法里边使用了多线程,并行线程等方法. 但主窗体控件直接使用此方法时,页面卡顿.所以主线程被堵塞. 代码如下, splitfile 这个方法运行时页面卡顿,阻塞了 ...
随机推荐
- 8.docker的安全性
在查看Docker安全性时,有四个主要方面需要考虑: 内核的内在安全性及其对命名空间和cgroup的支持; Docker守护进程本身的攻击面; 容器配置配置文件中的漏洞,默认情况下或用户自定义时. 内 ...
- Python 离线 安装requests第三方库
一.介绍 requests是Python的一个HTTP客户端库,跟urllib,urllib2类似,不过requests的优势在于使用简单,相同一个功能,用requests实现起来代码量要少很多.毕竟 ...
- Java基础-1
基础知识 1.进制 1.十进制 2.二进制 3.十六进制 2.十六进制转换 二进制转换 十进制转换
- webpack学习记录-认识loader(二)
Loader 就像是一个翻译员,能把源文件经过转化后输出新的结果,并且一个文件还可以链式的经过多个翻译员翻译. loader参考文章:https://webpack.docschina.org/loa ...
- [Nmap] Regular script
out of date: TCP:nmap.exe -sC -sS -sV -p 1-65535 -A -v -v -oX filename.xml ip UDP:nmap.exe -sC -sU - ...
- Matlab常用函数集锦
ndims(A)返回A的维数size(A)返回A各个维的最大元素个数length(A)返回max(size(A))[m,n]=size(A)如果A是二维数组,返回行数和列数nnz(A)返回A中非0元素 ...
- TensorFlow深度学习,一篇文章就够了
http://blog.jobbole.com/105602/ 作者: 陈迪豪,就职小米科技,深度学习工程师,TensorFlow代码提交者. TensorFlow深度学习框架 Google不仅是大数 ...
- GWAS: 曼哈顿图,QQ plot 图,膨胀系数( manhattan、Genomic Inflation Factor)
画曼哈顿图和QQ plot 首推R包“qqman”,简约方便.下面具体介绍以下. 一.画曼哈顿图 install.packages("qqman") library(qqman) ...
- selenium技术博客
1.java+selenium+详细的api说明和seleniumGrid使用,缺点是代码不够好看. http://www.cnblogs.com/yytesting/p/5714175.html
- django和celery结合应用
django+celery项目结构 - project_name - app01 - __init__.py - admin.py - views.py - modes.py - tasks.py # ...