怎么异步显示加载中 winform

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么异步显示加载中 winform相关的知识,希望对你有一定的参考价值。

这里涉及到的内容有点多了哦,不过如果把这些吃下去,winform也就过关了。
首先明确需要你说的异步显示的原因,当程序中需要进行长时间的计算时,如果在主线程中进行你的窗口会卡主,显示“程序没有响应”,造成界面不友好。所以出现了主线程只做数据显示,而计算都放到其他线程中进行的思路。大致的方法如下:
在主线程中设置代理(delegate)或者事件(event)。而当子线程运算完成或者运算到某一个节点时,调用主线程窗口的代理/事件,修改主窗体的显示。这里主要涉及的知识有多线程(仅仅知道如何启动子线程就可以,不需要一开始就接触线程安全)、代理、事件。具体可以参考这篇:http://wenku.baidu.com/view/39820c366c85ec3a87c2c5ea.html
参考技术A

//跟楼上观点基本一致,给你个处理异步线程demo的关键代码:

    TH_Login = new Thread(new ThreadStart(login));
                TH_Login.IsBackground = true;
                TH_Login.Start();

         private void login()

       

            this.Invoke(new delegatePic(picbox_Loading_Show), panel2, panel3, picbox_Loading);

        

        private delegate void delegatePic(Panel p1, Panel p2, PictureBox pb);

        private void picbox_Loading_Show(Panel p1, Panel p2, PictureBox pb)

       

            p1.Enabled = false;

            p2.Enabled = false;

            picbox_Loading.Visible = true;

       

    

本回答被提问者和网友采纳

winform中控件加载时显示背景残影的问题

我将上面的系统名称打码了哈,程序运行时 ,总会在一些控件区显示之前屏幕的残影,虽然一闪而过,但是很不美观,求助,路过的大神,这怎么解决啊

我也有这样的问题,我在窗体中加了这个方法
protected override CreateParams CreateParams

get

if (OSVersionInfo.Name == "Windows XP")//Windows XP系统

return base.CreateParams;

else //Windows 7 系统

var parms = base.CreateParams;
parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN
return parms;



然后系统加载时,就没有出现残影。希望能帮到你。我当时也找了好久,才解决。追问

大神 我把

  

这段加到我的代码里了,问题依然存在,我是用vs2005开发的,如图

我放的位置没问题吧,难道还需要修改其他配置吗?求高手知道啊

追答

哎~~ 这个就不知道了 。上面的OSVersionInfo是一个类名,如果你需要这个类,我可以给你。不知道是不是这个原因。7点我就不在线了。本来想粘贴上去,可是代码太多。无法提交!

追问

    啊 谢谢哈 ,方便时发我一下呗 541610862  

参考技术A 是图片的原因吧,微软是有这个问题,刷新背景图之类的会这样,你网上搜一下winform背景图刷新找找很多解决方式 参考技术B 你的窗体加载了第三方皮肤控件,每次加载时先加载第三方皮肤控件,我之前碰到过多次

以上是关于怎么异步显示加载中 winform的主要内容,如果未能解决你的问题,请参考以下文章

如何异步加载和显示数据

显示异步 Vue 2 组件的加载微调器

iOS 异步加载图片 使用EGOImageView、SDWebImage按步骤使用的,就是不能显示图片

Angular 5:使用异步管道搜索 - 显示加载指示器

Query Ajax 异步加载显示等待效果

浏览器调试工具怎么调试异步加载的js