关于Windows UI编程

        最近看了一些关于界面调度相关的书籍,一些程序在做桌面应用的时候可能会发现, 明明自己是调了操作UI的函数,可界面却没有做出更新(换句话说,界面没有执行你想要做的内容)如果你遇到 了,那么以下内容将对你有所帮助
        这是关于Window UI的,其现在的Window UI,不只是对WinForms,像WPF这也属于Windows UI 范畴,但两者在UI调用时是有一些不同的,但大体的思路是一致的
         出现上面红色字体所描述的内容时,其实是有原因的,这些应该是对童鞋来讲是比较新鲜的,因为在学校基上不会涉及到这方面的处理,想知道为什么,一定要看好啦。在WinForms中使用System.Windows.Forms和System.Windows命名空间进行用户界面(UI)开发时,事实上,我们要特别注意线程问题的处理,因为Microsoft Windows系列操作系统(也就是微软的操作系统产品啦)使用的是一个单线程的,基于消息处理的用户界面,也就是说每次只能有一个线程访问到用户界面。当然一个应用中 的开启UI线程是很多的,但是他们交换速度很快,以致于我们察觉不到,当你在其中某一个UI线程中调用另外一个UI操作时,就会调用不到,怎么办呢,应该通过Windows消息泵来封送处理。
具体操作可以是这样子: 在一个Windows窗体上,有一进度条,你想让它每隔一秒进度增长一点。进度满了之后自动关闭窗口。
        对于这么一个简单的问题,大家想到的肯定是 :加一 个窗体(Form1),在窗体上加多一个进度条(prograssBar),然后在写个循环就好了,但是你会发现当进度条在前进时,你根本不能拖动窗体,这就是单线程,这时你必须开启一个线程来做这个事情,开启一个线程有多个方式,这时就不多讲了,我们使用Task.Factory.StartNew(这是要执行的方法名),方便呵呵。 然后如开启一个线程后,然后你会发现之前的想法已经行不通了,因为已经有两个UI线程,你在当线程中访问不到新开启线程中的UI操作。
      接下来是关键:为了检查是否允许从一个线程中发出UI调用 ,需要调用控件的InvokeRequired属性,如果它的值为ture,则需要封送调用。否则不用。有人会问怎么封送的呢,问的很对,就是通过需要调用控件的Invoke(这是要执行的UI操作),这样你就可以很好操作UI了
    
      对于WPF(Windows Presentation Foundation)而言,也有这样的问题,不过需要采取稍有不同的一种方式。先给大家理清一点思绪呵,WPF的界面使用的是Xaml语言,大多数人会想到html,但却是两种完全不同的东西,她的界面成员也是一个个控件,每个控件都包含一个Dispacher(调度器),为DispatcherObject类型,调用调度器的CheckAccess() 方法的作用等同于在WinForms中调用InvokeRequired。也是使用调度器的Invoke()方法来实现封送调用 的。
Ok, 这就是关于WindowsUI所需要特别注意的了,有兴趣的童鞋可以研究一下哈。
需要详细的Demo可以联系我  这是我的Email: wangheng920411@163.com 
最近因为工作忙,放假又不想去弄了,很少去整理这些。不过还是把简单理下吧 。。。
---  wangheng 版权所有    转载需注明出处
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值