zoukankan      html  css  js  c++  java
  • .net 利用委托和线程解决窗体假死

    利用线程解决窗口假死

    基本理论:

    1,.net2.0以后,CLR默认不允许以非UI线程访问控件。

    在Framework1.x中,CLR允许应用程序以跨线程的方式运行,而在Framework2.0及以后版本中,System.Windows.Form.Control新增了CheckForIllegalCrossThreadCalls属性,它是一个可读写的bool常量,标记我们是否需要对非UI线程对控件的调用做出检测。如果指定true,当以其他线程访问UI,CLR会跑出一个”InvalidOperationException:线程间操作无效,从不是创建控件***的线程访问它”;如果为false,则不对该错误线程的调用进行捕获,应用程序依然运行。

    窗体阻塞分为两种情况。

    1,一种是在UI线程上调用耗时较长的操作,例如访问数据库,这种阻塞是UI线程被占用所导致,可以通过delegate.BeginInvoke的异步编程解决;

    2,另一种是窗体加载大批量数据,例如向ListView、DataGridView等控件中添加大量的数据。

    多线程和异步:

    异步和多线程是练个概念

    多线程是多个任务同时处理。

    异步值得是:例如:A在买东西,B店员需要去拿东西给A看,这个时候可以A继续看东西,而B去拿东西.等待B拿到后通知A.这个过程A是可以继续工作,在B完成后通知A。异步的实现还是依赖于多线程,因为有异步回调。

      异步回调:

    
    
    
    
  • 相关阅读:
    请实现一个js脚本,要求做到将数字转化为千分位表示如:1234567转化为1,234,567
    Linux mlocate安装
    Linux CentOS7网络简单配置
    Linux 常见命令 文件搜索命令
    Linux 常见命令 权限管理命令
    Linux 常见命令 链接命令
    Linux 常见命令 文件处理指令
    List与Set的contains方法效率问题
    集合介绍
    Arrays.asList()
  • 原文地址:https://www.cnblogs.com/canbefree/p/3496202.html
Copyright © 2011-2022 走看看