快速阅读

如何在winform程序中,让界面不再卡死。 关于委托和AsyncCallback的使用。

界面卡死的原因是因为耗时任务的计算占用了主线程,导致主界面没有办法进行其它操作,比如拖动。造成界面卡死的现象。我们只需要把耗时任务放在子线程中执行就可以了。

子线程的计算结果 要更新到界面中,怎么更新呢,因为不能操作主线程 ,所以要用委托来实现 。

我们来看个例子。

场景

界面上一个按钮加一人richbox , 点击以后获得当前所在年份

代码实现

定义一个委托实现子线程更新主线程

  1. public delegate void UpdateText(string message);
  2. public void UpdateTextMehod(string message)
  3. {
  4. richTextBox1.Text += message+"\r\n";
  5. richTextBox1.ScrollToCaret();
  6. }

按钮的点击事件

func委托:表示模拟一个耗时的操作(2s),然后返回一个结果 。

Asynccallback:表示在相应异步操作完成时调用的方法。在这个方法中,获取异步执行的结果。

​ 要获取异步执行的结果,要调用func.EncInvoke(IAsyncResult)

实例化更新主线程 的委托UpdateText,然后异步调用,在func委托的计算结果 赋值给界面

func异步调用 ,把该异步的的回调方法当做参数传入。

  1. Func<int> func = new Func<int>(() =>
  2. {
  3. Thread.Sleep(2000);
  4. return DateTime.Now.Year;
  5. });
  6. AsyncCallback callback=new AsyncCallback((x) =>
  7. {
  8. var result=func.EndInvoke(x);
  9. UpdateText ut = new UpdateText(UpdateTextMehod);
  10. this.BeginInvoke(ut, result.ToString());
  11. });
  12. func.BeginInvoke(callback, "object vlaue");

注意

最后一句代码,可以写成这样,但是会卡死,

  1. var res =func.BeginInvoke(null,null);
  2. var result1 = func.EndInvoke(res).ToString();
  3. richTextBox1.Text += result1.ToString();

所以异步方法的执行结果要放在回调函数中,这样就不会卡死主界面。

切记。

友情提示

​ 我对我的文章负责,发现好多网上的文章 没有实践,都发出来的,让人走很多弯路,如果你在我的文章中遇到无法实现,或者无法走通的问题。可以直接在公众号《爱码农爱生活 》留言。必定会再次复查原因。让每一篇 文章的流程都能顺利实现。

winform如何不卡界面的更多相关文章

  1. WinForm查询大数据界面假死,使用异步调用解决

    用DataGridView无分页绑定一个几千条数据的查询,查询的时候界面直接卡死十几秒,用户体验非常不好,因此用异步操作解决界面卡死的问题原本场景:点击[查询]后,界面直接卡死优化场景:点击[查询]后 ...

  2. winform设计一个登录界面和修改密码的界面-自动切换窗体(问题[已解] 望一起讨论)(技术改变世界-cnblog)

    http://www.cnblogs.com/IAmBetter/archive/2012/01/14/2322156.html winform设计一个登录界面和修改密码的界面-自动切换窗体(问题[已 ...

  3. C# Winform频繁刷新导致界面闪烁解决方法

    C#Winform频繁刷新导致界面闪烁解决方法 一.通过对窗体和控件使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于大多数应用程序,.NET Framework 提供的默认双缓冲将 ...

  4. winform频繁刷新导致界面闪烁解决方法

    转自龙心文 原文 winform频繁刷新导致界面闪烁解决方法 一.通过对窗体和控件使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于大多数应用程序,.NET Framework 提供 ...

  5. 详解如何利用FarPoint Spread表格控件来构造Winform的Excel表格界面输入

    我们先来简单了解一下WinForm和FarPoint,WinForm是·Net开发平台中对Windows Form的一种称谓.而FarPoint是一款模拟EXCEL的控件.它可以根据用户的要求实现很大 ...

  6. C# WinForm 技巧八:界面开发之“WeifenLuo.WinFormsUI.Docking+OutLookBar” 使用

    概述      最近几天一直在关注WinFrom方面的文章主要还是园子里伍华聪的博客,在看看我们自己写的项目差不忍赌啊,有想着提炼一下项目的公共部分,公共部分有分为 界面,类库两方面,今天主要是把界面 ...

  7. C# WinForm 技巧八:界面开发之“WeifenLuo.WinFormsUI.Docking+OutLookBar” 使用

    概述 转自 http://www.cnblogs.com/luomingui/archive/2013/09/19/3329763.html 最近几天一直在关注WinFrom方面的文章 有想着提炼一下 ...

  8. WinForm触摸屏程序功能界面长时间不操作自动关闭回到主界面 z

    操作者经常会在执行了某操作后,没有返还主界面就结束了操作然后离开了,程序应该关闭功能窗体自动回到主界面方便下一位操作者操作.那么对于WinForm程序怎么实现呢? 实现原理:拦截Application ...

  9. Winform开发中对界面的组织布局

    在设计界面的时候,不管是在Web端,还是在Winform端,或者是WPF或者移动界面等应用上,我们对界面的组织布局,一直是比较有趣的话题,而组织界面的好坏从用户的感受来看,可以提供程序可使用性高低,也 ...

随机推荐

  1. 浅谈 form 表单提交

    原创文章,转载请注明出处:http://www.cnblogs.com/weix-l/p/7675230.html 若有错误,请评论指出,谢谢! Form 对象代表一个 HTML 表单.在 HTML ...

  2. TP5框架模块绑定二级域名

    application\config.php 修改 url_domain_deploy 为 true 'url_domain_deploy' => true application\route. ...

  3. IDEA快速搭建WEB项目【记录篇】

    这里用的都是市面上通用的技术,而每个公司都有自己的调用方式,可以根据实际情况与业务场景不同去进行变通 三层架构: 界面层(User Interface layer).业务逻辑层(Business Lo ...

  4. Scrum会议博客以及测试报告

    3组Alpha冲刺阶段博客目录 一.Scrum Meeting1. 第六周会议记录(链接地址:https://www.cnblogs.com/Cherrison-Time/articles/11788 ...

  5. python制作的翻译器基于爬取百度翻译【笔记思路】

    #!/usr/bin/python # -*- coding: cp936 -*- ################################################### #基于百度翻 ...

  6. Java—网络编程总结(整理版)

    1. 概述 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来的,实现资源共享和数据传输的系统.网络编程就是编写程序使互联网的两个(或多个)设备(如计算机)之间进行 ...

  7. HDFS中的fsck命令(检查数据块是否健康)

    在HDFS中,提供了fsck命令,用于检查HDFS上文件和目录的健康状态.获取文件的block信息和位置信息等. 我们在master机器上执行hdfs fsck就可以看到这个命令的用法. [hadoo ...

  8. python - django (实现电子邮箱的账户注册和验证码功能)

    使用 Django 来做一个电子邮箱注册 并 发送验证码的功能 (此处以 163 邮箱为例) 一. 登陆 163 邮箱账号,  然后进行下列操作 二. settings 配置文件 # 发送邮箱验证码 ...

  9. IO多路复用的作用?

    I/O多路复用实际上就是用select, poll, epoll监听多个io对象,当io对象有变化(有数据)的时候就通知用户进程.好处就是单个进程可以处理多个socket.当然具体区别我们后面再讨论, ...

  10. 学习Spring-Data-Jpa(六)---spring-data-commons中的repository

    1.spring-data-commons项目 spring-data-commons项目是所有spring-data项目的核心,我们来看一下该项目下的repository包中的接口和注解. 2.Re ...