C#为什么要使用Invoke,它和BeginInvoke有什么区别

C#为什么要使用Invoke,它和BeginInvoke有什么区别,第1张

在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate。

一、为什么Control类提供了Invoke和BeginInvoke机制?

关于这个问题的最主要的原因已经是dotnet程序员众所周知的,我在此费点笔墨再次记录到自己的日志,以便日后提醒一下自己。

1、windows程序消息机制

Windows GUI程序是基于消息机制的,有个主线程维护着一个消息泵。这个消息泵让windows程序生生不息。

Windows GUI程序的消息循环

Windows程序有个消息队列,窗体上的所有消息是这个队列里面消息的最主要来源。这里的while循环使用了GetMessage()这个方法,这是个阻塞方法,也就是队列为空时方法就会被阻塞,从而这个while循环停止运动,这避免了一个程序把cpu无缘无故地耗尽,让其它程序难以得到响应。当然在某些需要cpu最大限度运动的程序里面就可以使用另外的方法,例如某些3d游戏或者及时战略游戏中,一般会使用PeekMessage()这个方法,它不会被windows阻塞,从而保证整个游戏的流畅和比较高的帧速。

这个主线程维护着整个窗体以及上面的子控件。当它得到一个消息,就会调用DispatchMessage方法派遣消息,这会引起对窗体上的窗口过程的调用。窗口过程里面当然是程序员提供的窗体数据更新代码和其它代码。

桌面应用程序就是GUI程序,是采用图形方式显示的计算机 *** 作用户界面。

图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备 *** 纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。

相对于Web应用程序而言的,主要区别在于应用程序自身与它的用户界面之间的相对位置不同。

扩展资料

桌面应用程序 在开发的过程中需要考虑很多因素。为了让最终用户获得最佳的使用体验,不但需要考虑 逻辑 上的因素还要考虑 技术 上的因素。桌面应用程序 首先考虑的并非靠平台,而且 桌面应用程序 更依赖硬件的支持。

运行桌面应用程序时,用户界面会出现在运行应用程序的机器屏幕上。应用程序和它的用户界面之间的消息通过机器的 *** 作系统进行传递。

参考资料来源:百度百科-桌面应用程序


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12114454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存