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 这个方法运行时页面卡顿,阻塞了 ...
随机推荐
- set 数据类型
list => 允许重复的集合,可修改 tuple => 允许重复的集合,不可修改 dict set => 不允许重复的集合 .set 不允许重复的列表 1.创建 s = set() ...
- 三、数据API-3
预备 返回格式需要包括: // Code 状态码(200,400等) // Msg 提示信息(邮箱格式不正确:数据返回成功等) // Result 返回数据 一.WebAPI与传统MVC的区别是 MV ...
- Word Representations 词向量
常用的词向量方法word2vec. 一.Word2vec 1.参考资料: 1.1) 总览 https://zhuanlan.zhihu.com/p/26306795 1.2) 基础篇: 深度学习wo ...
- redis哨兵(Sentinel)、虚拟槽分区(cluster)和docker入门
一.Redis-Sentinel(哨兵) 1.介绍 Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果master本身宕机,r ...
- vue2.0用组件实现选项卡
HTML JavaScript 使用 $emit(eventName) 触发事件,在组件内部绑定点击事件,每个独立组件之间发生点击事件触发外层函数,实现选项卡功能
- 【LOJ2586】【APIO2018】选圆圈 CDQ分治 扫描线 平衡树
题目描述 在平面上,有 \(n\) 个圆,记为 \(c_1,c_2,\ldots,c_n\) .我们尝试对这些圆运行这个算法: 找到这些圆中半径最大的.如果有多个半径最大的圆,选择编号最小的.记为 \ ...
- FastDFS 分布式文件系统搭建
安装依赖环境yum install make cmake gcc gcc-c++ pcre-devel zlib-devel perl-devel 安装libfastcommon-master.zip ...
- 省市区JSON
行政编码 ViewBag.CssLinks = ""; 行政编码 中国和韩国行政编码选择.数据来自json文件,但在前端通过json对象调用. 注意本地方式,是将json文件作为对 ...
- Springboot 3.需求携带参数的get请求
还是拿来上节讲的代码: package com.course.server; import org.springframework.web.bind.annotation.*; import java ...
- linux device drivers ch01
ch01. 设备驱动程序简介 设备驱动程序的作用在于提供机制(需要提供什么功能),而不是提供策略(如何使用这些功能). 内核功能划分: 进程管理:进程创建.销毁.进程间通信.共享cpu调度器. 内存管 ...