zoukankan      html  css  js  c++  java
  • 本周博客--WinForm线程初步 2014-10-31 09:15 54人阅读 评论(0) 收藏

    嗯,WinForm作为一个比较程序的微软的技术已经为我们服务了很久很久,在技术不断更新的今天WinForm虽显老态龙钟但是在客户端快速开发中,它的地位还是无可取代的

    今天就来分享一下WinForm中的线程使用问题.


    嗯,我们的程序一般都是需要和数据库进行交互的,那么网络的交互和大数据量的后台处理如果是在主线程进行处理,那么肯定会导致程序的假死(也就是界面卡住不动),作为一个用户体验良好的程序,这一点是必须杜绝的,对于这个问题,用子线程来处理就会方便很多.


    值得注意的是,线程间的切换会占用较大的CPU计算,切换的方法,时间需要自己把握.


    下面给出一个示列代码:

    新建一个线程 
    new Thread(() =>
                {
    <span style="white-space:pre">		</span>//你可以在这里操作主线程加入一个等待的图标 或者 旋转的图案,呃 我是用GDI+自己画的控件,就不贴出来了.
                    byte[] by = WcfOperateService.....//这里是访问WCF服务,获取到数据
                    object o = CompressionUtility.DecompressObject(by);//得到数据后,切换到主线程
    
                        if (this.IsHandleCreated) //判断主线程是否有句柄(PS:这个判断具体什么原理我也不清楚,嗯..希望大神能解答一下)
                        {
                            this.Invoke(new Action(() =>  //在主线程实现一个匿名委托,根据得到的数据,在界面上进行反映.
                            {
                                if (listApp.Count <= Pagecount)
                                {
                                    btnPageUp.Enabled = false;
                                    btnPageDown.Enabled = false;
                                }
                                else
                                {
                                    btnPageDown.Enabled = true;
                                    btnPageUp.Enabled = false;
                                }
    
                               this.ShowAppControl();
                            }));
                        }
    
                    }
    
                }).Start();



    嗯,以上就是..我一遍写只需要执行一遍的匿名线程+匿名委托

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    数列(codevs 1141)
    Circle(codevs 3134)
    Jam的计数法(codevs 1140)
    水果姐逛水果街Ⅰ(codevs 3304)
    引水入城(codevs 1066)
    Vigenère 密码(luogu 1079)
    铺地毯(luogu 1003)
    SSO之CAS基础及应用视频教程(1)
    Spark高速入门指南(Quick Start Spark)
    python爬虫CSDN文章抓取
  • 原文地址:https://www.cnblogs.com/GuZhenYin/p/4663050.html
Copyright © 2011-2022 走看看