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 这个方法运行时页面卡顿,阻塞了 ...
随机推荐
- excel冻结标题栏,让标题栏不滚动的方法
https://jingyan.baidu.com/article/148a1921f54afe4d71c3b18e.html
- Python——序列化模块
#json 模式 1.dumps.loads 方法 针对内存 dic = {'k1':'v1'} #转换成json import json str_d = json.dumps(dic) #序列化 ...
- C++/cli中swtich处理命令行接收到的关键字
QQ群友中有人提出这样一个问题: Swtich接受的是整形或枚举类型, 关键字多数是一个字符, 将string转换成char就应该可以, 所以我试着写了一下代码, 直接提取string的第一个字符, ...
- Spring MVC 使用介绍(七)—— 注解式控制器(三):生产者与消费者模型
一.MIME类型 MIME类型格式:type/subtype(;parameter)? type:主类型,任意的字符串,如text,如果是*号代表所有 subtype:子类型,任意的字符串,如html ...
- Android的LinearLayout中orientation默认值为什么是HORIZONTAL
在一个偶然(闲着无聊)的过程中,突然非常好奇为什么LinearLayout在不指定排列方向为垂直(VERTICAL)时就得是水平方向(HORIZONTAL)排列的.产生这个疑问的时候脑子里蹦出来的第一 ...
- Python_爬虫 Scrapy 安装报错一整套处理流程
安装顺序 scrapy 需要的依赖很多.首先需要 twisted 如果没有这个 直接安装 scrapy 会报错 要求你安装一个 vis 14 还是什么的环境,那个东西如果真的要装要 6g 但 ...
- LOJ #2533. 「CTSC2018」暴力写挂(边分治合并)
题意 给你两个有 \(n\) 个点的树 \(T, T'\) ,求一对点对 \((x, y)\) 使得 \[ depth(x) + depth(y) - (depth(LCA(x , y)) + dep ...
- min_25筛
min_25筛 用来干啥? 考虑一个积性函数\(F(x)\),用来快速计算前缀和\[\sum_{i=1}^nF(i)\] 当然,这个积性函数要满足\(F(x),x\in Prime\)可以用多项式表示 ...
- Shell入门及实践
解释器 解释器是一种命令解释器,主要作用是对命令进行运行和解释,将需要执行的操作传递给操作系统内核并执行 #!/bin/bash(默认),指定解释器 #!/bin/bash #这是第一个shell脚本 ...
- badboy安装及使用
badboy下载 下载地址:http://www.badboy.com.au/download/index 直接点击[continue] badboy安装 badboy录制 默认是录制状态 访问sog ...