C# winforms 窗口延迟初始化 splash 定时器

news2024/11/12 20:04:37

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客


        窗口启动的时候如果处理比较多,界面显示比较慢,这是比较抓狂的。

        有几个解决之道,比如加个splash,但是对于winforms程序,加splash可能遇到麻烦。

        winfroms程序要从Main函数的最后一句“Application.Run(new FormMain());”启动,在此此句之前可以用Thread显示别的窗口,但是会导致主窗口不能显示在前端,会被隐藏在VS后面(我是从VS运行程序的),试图用TopMost之类简单方法把窗口提到前端,发现不行(能用的方法要直接调用WinAPI,麻烦)。

        所以最后用了更简单的办法来解决:延迟初始化。

        窗口的初始化主要在构造函数和Load事件里,把里面的复杂处理统统移出来,放在窗口显示之后处理,具体要接著一个定时器。

一、给form添加定时器

        从工具箱找到定时器:

         添加到设计器上:

        会出现在窗口下面,非显示组件都在这里,可以设置属性,修改名称,定时器默认是没有启用的,这符合要求,我们会在代码里设置并定时器。修改定时器名字,然后双击定时器就可以进入定时器的触发事件了。

二、定时器事件

        定时器时间叫Tick,双击就可以自动生成,然后修改代码:

		private bool init_once = false;//控制初始化只执行一次
		private void timer_init_once_Tick(object sender, EventArgs e)
		{
			if (init_once) return;
			init_once = true;
			timer_init_once.Enabled = false;//只执行一次

			Cursor oldcursor = this.Cursor;
			this.Cursor = Cursors.WaitCursor;

			Init();

			this.Cursor = oldcursor;
		}

        增加一个变量“bool init_once”来控制不要重复执行,因为从事件触发到执行事件代码的间隔是不确定的,最理想是用个互斥对象,这里比较草率了,使用了不严格的互斥处理。

        进入事件处理立即关闭了定时器(是在Load里启动的),然后设置了等待光标。

        Init()里面是实际的初始化代码。

三、构造函数和Load事件

        构造函数里能不做的事就别做了,new 对象也可以放到后面去,设置了等待光标嘛,不用担心用户提前操作。

        Load事件里面只启动定时器,别的也都延迟去做:

		private void FormMain_Load(object sender, EventArgs e)
		{
			timer_init_once.Interval = 10;
			timer_init_once.Enabled = true;
        }

        设置了10毫秒,应该都没所谓的。窗口会先显示,然后初始化……嗯,这里有个BUG,应该在这里设置等待光标的,不然存在一个短暂的可操作间隔。


(这里是文档结束)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2118697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微课录制技巧|高效录制微课的方法,如何高效录制微课?

在教育领域,微课作为一种新兴的教学方式,越来越受到教师和学生的欢迎。本文将为您详细介绍如何高效录制微课,以及如何利用各种资源来提升备课和教学的质量。 微课录制技巧: 录制前的准备 在开始录制前,确保您已经明确…

客服知识库与员工培训:打造专业客服团队的秘密武器

在竞争激烈的商业环境中,优质的客户服务已成为企业脱颖而出的关键要素之一。而构建一个高效、专业的客服团队,则离不开一个全面、精准的客服知识库。客服知识库不仅是信息的宝库,更是员工培训与技能提升的秘密武器,它在新员工入职…

Adobe Illustrator非矢量图片的交集利用剪切蒙版实现

AI不支持对于非矢量图片的交集处理,但是可以通过剪切蒙版类似地实现需求。 如下图,字母F是一张PNG图片,为位图文件(非矢量)。 现在我需要将这种图片与黑色的矩形求交: 将两个目标全部选中,鼠标…

AI 浪潮中的一体化数据库|外滩大会之OceanBase实录

2024 年 9 月 5 日至 7 日,在上海黄浦世博园区,“2024 Inclusion 外滩大会”盛大举行。期间,9月6日,由OceanBase携手赛迪顾问共同策划并主办了 “AI浪潮中的分布式数据库:探索行业增长新动能与关键业务负载实践”。本…

优橙240419期就业榜来啦!就业班平均就业薪资8,333.3元!梦想不会发光,发光的是追梦的你!

有多坚定的信念,就有多勇毅的行动,就能开辟多光明的未来。时隔3个月,优橙240419就业喜报已送达! 就业班平均就业薪资8,333.3元,就业学员即将奔赴祖国各地。 行百里者半九十。人类的美好理想,都不可能唾手而…

构建Web3社交平台:DeBox式DApp开发全攻略

要仿照DeBox构建一款Web3社交平台系统,首先需要理解DeBox的核心功能和技术架构,并根据自己的目标和用户需求进行调整和创新。以下是一个基本的开发步骤指南,帮助你从概念到实践,逐步构建一个类似的Web3社交平台。 1. 明确项目目标…

vue3 +百度地图 实现 地点检索,输入联想,经纬度,逆地理编码,创建标记,label等

由于百度地图文档确实有点欠缺,在这里记录一下 vue3 百度地图(js api 3.0)实现效果如下实现方式注意事项 vue3 百度地图(js api 3.0) 需求: 地图弹框组件,可以搜索地图点,输入联想…

算法-双指针技巧

文章目录 算法概述奇偶数字归位寻找重复数字接雨水救生艇问题 算法概述 设置两个指针的技巧,其实这种说法很宽泛,似乎没什么可总结的 有时候所谓的双指针技巧,就单纯是代码过程用双指针的形式表达出来而已。 没有单调性(贪心)方面的考虑有时…

基于Python的网络编程

现代的应用程序都离不开网络,网络编程是非常重要的技术。Python提供了两个不同层次的网络编程API:基于Socket的低层次网络编程和基于URL的高层次网络编程。Sockrt采用TCP、UDP等协议,这些协议属于低层次的通信协议;URL采用HTTP和H…

4G工业路由器:SR700的智能连接解决方案

在现代工业环境中,网络连接的稳定性和速度是确保生产效率和数据安全的关键。SR700 4G工业路由器凭借其卓越的性能和多样的功能,成为了工业自动化和物联网应用中的理想选择。本文将详细介绍SR700的产品特点,并结合一个真实的项目案例&#xff…

网络传输的基本流程

目录 0.前言 1.TCP/IP四层协议模型的认识 2.数据传输的大致流程 3.局域网通信的原理 4.同一网段下两台主机之间的通信 5.不同网段下两台主机之间的通信 0.前言 不知道你有没有这样的疑问,为什么不同的设备之间能够进行数据的发送和接收?不同的通信…

小米嵌入式面试题目RTOS面试题目 嵌入式面试题目

第一章-非RTOS bootloader工作流程 MCU启动流程 通信协议,SPI IIC MCU怎么选型,STM32F1和F4有什么区别 外部RAM和内部RAM区别,怎么分配 外部总线和内部总线区别 MCU上的固件,数据是怎么分配的 MCU启动流程 IAP是怎么升级的…

​​MEPA(Maximum Efficiency Per Ampere)控制

一.控制目的 与MTPA控制相比,没有忽略电机的铁耗,以电能损耗最小为目的优化电流。 分析思路与MTPA控制类似,在此省略。 二. 推导过程

【前端】读取csv文件,将数据转换为对象。spilce与slice的区别

一. 解决思路 解决思路:将csv文件的第一行作为key,后续的每一行作为value存入对象数组。 二. 代码写法 2 .1 JS写法 2.1.1 数组.map(function(item, index,arr){}) Item: 这个表示的是每一项对应的索引。 index: 这个表示的是每一项对应的索引。 a…

LTE PSS主同步信号PSS搜索阶段频偏估计

频偏的影响: 本期要讲到PSS搜索阶段,整数倍频偏和小数倍频偏的估计方法,整数倍频偏指的是子载波间隔的整数倍比如15k、30k等,小数倍频偏指的是一个子载波间隔以内的。在OFDM通信系统中,频偏是一个比较敏感的词,正常如果频偏估不准会带来一系列的问题,比如OFDM信号的正交…

高校大模型实验室大模型应用平台

大模型应用平台是一款专为高校大模型应用场景教学和科研打造的知识库问答系统。该平台易于使用,知识库支持常见的txt、doc、pdf、md等数据文件上传,同时提供了简洁易懂的操作配置界面,使用户可以轻松地搭建和训练AI应用,并快速进行…

Selenium:设置元素等待、上传文件、下载文件

前言:在工作和学习selenium自动化过程中记录学习知识点,深化知识点 1. 设置元素等待 元素定位之元素等待-- WebDriver提供了两种类型的等待:显示等待和隐式等待。 1.1 显示等待 显式等待使WebDriver等待某个条件处理时继续执行&#xff…

mycat双主高可用架构部署-mycat安装

MySQL5.7服务器IP是192.168.31.209及192.168.31.210 1、安装Java运行环境 ELK搭建日志平台里面有Java安装,同样也可以采用yum安装 yum install -y java java -version 2、下载并解压mycat wget http://dl.mycat.org.cn/1.6.7.6/20220524101549/Mycat-server-1.…

支小宝来了!支付宝AI生活管家,让AI帮你“干活“

众所周知,支付宝界面越来越复杂,从最初的一个支付工具逐渐演变成了一个综合性的平台,涵盖了生活中的各个方面。 功能的增加的同时不可避免的就会导致使用不便。 随着大模型的应用,支付宝基于百灵大模型推出了“支小宝”AI生活管家…

盘点4款比pr剪辑简单的视频剪辑工具。

PR剪辑软件对于很多不太懂剪辑的人来说确实有点不太好操作,需要去学习一些剪辑知识使用比较好。如果想要在短时间内掌握一些剪辑技巧,可以选择相对简单一点的剪辑工具。比如下面这4款,不管是新手还是会剪辑的人都可以使用。 1、福昕高效剪辑 …