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。异步的实现还是依赖于多线程,因为有异步回调。

      异步回调:

    
    
    
    
  • 相关阅读:
    CCLayerColor 用法
    数据存储的常见方式
    rand() 和arc4random()到底应该如何取舍呢
    Cocos2d 中对图片的各种操作
    objectivec 解压缩zip
    设置IE浏览器默认的下载路径
    设置浏览器主页
    得到所有本机上安装的软件名
    取消快捷方式中的箭头图标
    查看本机服务
  • 原文地址:https://www.cnblogs.com/canbefree/p/3496202.html
Copyright © 2011-2022 走看看