首页 > 其他分享 >winform窗口不响应|不刷新处理

winform窗口不响应|不刷新处理

时间:2022-10-18 16:14:50浏览次数:55  
标签:控件 Task Run await 主线 响应 线程 刷新 winform

winform主线程执行耗时操作或循环时,会导致窗口不响应,也看不到控件的更新:

方案1:主线程中开启循环,耗时操作放在子线程中处理,控件在主线程中修改。

        private async void button1_Click(object sender, EventArgs e)
        {
            int i = 0;
            while (true)
            {
                await Task.Run(() =>
                {
                    i++;
                    Thread.Sleep(1000);
                });
                label1.Text = i.ToString();
            }
        }

 

注意:使用【await Task.Run】开启并等待一个线程,await关键字可以让控制权返回到主线程,保证主线程不卡顿。


方案2:先开子线程,再子线程中开启循环,耗时操作放在子线程中处理,再在子线程里指定主线程来调用修改控件。

        private void button1_Click(object sender, EventArgs e)
        {
            int i = 0;
            Task.Run(() =>
            {
                while (true)
                {
                    this.Invoke(new Action(() =>
                    {
                        label1.Text = i.ToString();
                    }));
                    i++;
                    Thread.Sleep(1000);
                }
            });
        }

 

注意:子线程不能修改主线程创建的控件,需要使用【this.Invoke】指定使用主线程执行一个委托方法。

标签:控件,Task,Run,await,主线,响应,线程,刷新,winform
From: https://www.cnblogs.com/ariter/p/16802898.html

相关文章

  • [答疑]业务序列图上等待响应怎么画
    Alan2020-5-1412:41各位同学,对于1.31.6在需求规约这样写系统请求A系统处理XXX,系统等待B系统发送分析结果这样合理不?还是要拆成1.6拆成另一个用例,但是用户对引入系统的期......
  • Winform框架中多语言的处理
    Winform界面中,有时候,需要对界面进行一些多语言的处理,以适应客户场景的使用,如有时候需要考虑英文、日文、韩文等客户的使用,那么在Winform界面如何实现这种多语言的正常处理......
  • 界面控件DevExpress WinForm中文指南 - 使用HTML&CSS模板的条件样式
    DevExpressWinForm拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office......
  • vue 的响应式原理
    通过Obejct.defineProperty定义数据,给数据加上geter和setter,获取数据和触发getter设置数据触发setter,从而实现数据的监听;通过发布订阅模式进行依赖收集与视图......
  • 解决vuex刷新页面数据丢失问题(数据持久化)
    1、为什么刷新页面vuex的数据会丢失刷新页面vuex的数据会丢失属于正常现象,因为JS的数据都是保存在浏览器的堆栈内存里面的,刷新浏览器页面,以前堆栈申请的内存被释放,这就是......
  • 记录--图解 Vue 响应式原理
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助最近部门分享,有同学提到了Vue响应式原理,大家在讨论时,发现一些同学对这一知识理解还不够深入,不能形成......
  • Vue3中 响应式 API ( readonly、shallowReadonly、toRaw、markRaw ) 详解
    1.readonly函数接受一个对象(不论是响应式还是普通的)或是一个ref,返回一个原值的只读代理。只读代理是深层的:对任何嵌套属性的访问都将是只读的。它的ref解包行为......
  • C# winform treeview GDI+流程连线 流程图 树形流程图
    C#winformtreeviewGDI+流程连线流程图树形流程图 TreeView_Paint的方法呈现效果,具体如下1.点击连线按钮开始准备连线2.点击第一个连线的起始节点3.再点击第二个......
  • vue源码分析-响应式系统(一)
    从这一小节开始,正式进入Vue源码的核心,也是难点之一,响应式系统的构建。这一节将作为分析响应式构建过程源码的入门,主要分为两大块,第一块是针对响应式数据props,methods,da......
  • vue源码分析-响应式系统(二)
    为了深入介绍响应式系统的内部实现原理,我们花了一整节的篇幅介绍了数据(包括data,computed,props)如何初始化成为响应式对象的过程。有了响应式数据对象的知识,上一节的后......