当前位置:首页 > 网络技术 > Win技巧 > 正文内容

七天入门C#上位机-界面更新放后台不香嘛

admin2年前 (2023-02-28)Win技巧139

上图中,Winform窗体界面需要实时更新数据和信息显示在主窗体上,那么如何实现这种效果呢? 

一、解答

这里其实是运用了线程的知识。现阶段多线程的原理不需要理解很深,但至少还是要了解一些的。

线程主要分为UI线程和CPU线程两种。

UI线程:就是主线程,界面就是在主线程中运行的,与界面有关的数据都会通过UI线程传递到界面上。Winform,Html界面如猎豹浏览器界面等,界面显示都离不开UI线程。

CPU线程:后台线程,主要负责在后台执行任务作业。

二、线程之间的相互作用

多线程的知识本文不过多的解释,后面会出一篇文章详细介绍在上位机中如何运用多线程技术。

现在我们知道,UI线程是负责界面显示交互的,所以,一旦有过多或者很耗时的任务在UI线程上来执行,那么UI线程只能等待它执行完成后才会继续往下走。然而耗时任务往往需要等待很长时间,所以就造成了我们常说的UI线程阻塞,界面就会很卡。

如果想让界面不卡,就不能让过多的任务在UI线程执行,这里是指时间复杂度过高的任务。

对于CPU线程,因为它是独立的,不会阻塞UI线程。所以一般耗时任务都可以放在这里运行。

三、如何使用后台线程

回到本文主题,如何让界面更新放在后台且可以实时更新提高用户体验呢,答案就是启动一个CPU后台线程。然后让CPU线程去执行耗时任务,最后调用UI主线程把结果显示出来。

四、代码如何写?

先写的一个log日志的方法:


public void AddLogMethod(int index, string Log, Exception ex)

        {

            ListViewItem lst = new ListViewItem("   " + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), index);

            lst.SubItems.Add(Log);

            lstInfo.Items.Insert(0, lst);

            if (index == 1)

            {

                LogHelper.Info(Log);

            }

            else if (index == 3)

            {

                LogHelper.Error(Log, ex);

            }

        }



再调用委托执行;



        public void AddLog(int index, string Log, Exception ex)

        {

            if (this.lstInfo.InvokeRequired)

            {

                this.lstInfo.Invoke(new Action(() =>

                {

                    AddLogMethod(index, Log, ex);

                }));

            }

            else

            {

                AddLogMethod(index, Log, ex);

            }

        }



最后在需要的地方使用就行;

        private void FormMain_Load(object sender, EventArgs e)

        {

            //skinEngine1.SkinFile = Application.StartupPath + @"/Skins/office2007.ssk";

            if (Program.currentAdmin.UserRights == "操作员")

            {

                tSB_Manager.Enabled = false;

            }

            TimeUp();

            timer1.Start();

            //this.Resize += new EventHandler(Form1_Resize);//窗体调整大小时引发事件

            //X = this.Width;//获取窗体的宽度

            //Y = this.Height;//获取窗体的高度

            //setTag(this);//调用方法

            AddLog(0, "启动软件", null);

        }

扫描二维码推送至手机访问。

版权声明:本文由梦魁网络资源站发布,如需转载请注明出处。

本文链接:https://family.monkui.com:39/?id=1013

分享给朋友:

相关文章

【网盘聚合神器】支持百度(不限速)、阿里、天翼、迅雷、蓝奏、谷歌等29款网盘

【网盘聚合神器】支持百度(不限速)、阿里、天翼、迅雷、蓝奏、谷歌等29款网盘

  百度网盘的限速可能会让你转战阿里云盘,但是阿里云盘的缺点在于不能分享,网络上的资源都是通过各类网盘来分享的,这样就会让你可能同时拥有不同网盘的账号。  那么我们有没有一款工具,可以将这些网盘资源聚合一下,把所有的网盘都挂载在电脑上,当做...

七天入门C#上位机——第六天:如何打包软件制作安装包

七天入门C#上位机——第六天:如何打包软件制作安装包

C#编写好程序后需要进行程序打包,个人觉得C#自带程序打包工具使用复杂,这里推荐一个好用的程序打包工具Inno Setup,Inno setup是一个免费、开源、简单的打包软件。这个软件足够简单,一分钟就完成打包。这个软件也足够强大,你想实...

七天入门C#上位机——第七天:能远程升级打补丁你说香不香

七天入门C#上位机——第七天:能远程升级打补丁你说香不香

对于一个优秀的PC桌面应用程序而言,自动升级功能是必不可少的,目前应用程序主流的自动升级策略是重新下载安装包安装整个客户端,这种方法简单易用,但缺点也很明显,比如,即使整个客户端有10G,而本次更新仅仅只是修改了一个1k大小的dll,那意味...

七天入门C#上位机——第四天:动态库大乱斗

七天入门C#上位机——第四天:动态库大乱斗

有句古话叫工欲善其事必先利其器,意思就是想要做好一件事情,必须要先磨炼好工具,有了好的工具才能够做到事半功倍的效果;开发上位机也是这样,要想把上位机项目做的既好又高效,好的工具是必不可少的,下面介绍上位机开发中常见的几个模块中用到的动态库工...

七天入门C#上位机——第三天:必须和非必须功能实现

七天入门C#上位机——第三天:必须和非必须功能实现

前两天跟大家介绍了一下上位机的登录界面和后台程序,今天跟大家总结一下上位机常用的功能;首先我们从设计上位机的初衷出发,上位机一般是跟着设备走的,所以它的功能一定是围绕着人,机,物来实现的。上位机的第一个功能是围绕着人展开的,这里的人就是用户...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。