在WinForm里嵌入WPF模拟公交运行状态
公司有个公交项目,模拟公交运行的时候使用的纯WinForm技术,5秒钟刷新一次,不仅看起来感觉很丑,而且性能上很有问题,听说一段时间后就会因为内存问题崩溃(估计是没释放非托管资源吧,不断重绘,非托管资源没有释放,时间长了导致内存泄露。不知道我的看法对不对,或许因为别的问题?因为我不参与该项目,所以只能猜测)。后来技术总监找到我,说听说我对WPF有研究,我说略懂一二。他要我做个评估,如果用WPF技术来做这个的话,要多长时间。我说不好估计,但是我看到这个,脑里也有思路。他说现在也还没确定要不要用WPF来做,等最终商议好了再做决定,如果有需要,就把你调过来这边这组。我说那好,如果有需要的话就找我就好了。
旧的项目工作在昨天下午告一段落,今天上午似乎没有什么要紧的事情干,于是先把技术总监那个问题模拟一下,如果以后需要的话,我也好开展工作。
需求如上图,公交有上行、下行两条线,然后模拟公交的实时位置(实际情况更复杂点)。
因为项目是基于WinForm的,所以我干脆也建一个WinForm的项目,再在里面嵌入WPF好了。我新建了一个WPF用户控件,然后把所有逻辑都写在那里了,再在WinForm里使用ElementHost控件和WPF进行交互,把WPF用户控件设为ElementHost的子元素,然后就OK了。
至于WPF用户控件的逻辑,我是制造了一些伪数据,模拟20个站点(使用ListBox控件承载站点数据),然后用了一个DispatcherTimer,每2秒钟让车从上个站点移动到下个站点,车运动延时1秒钟,整个过程看起来就很流畅很真实。到了终点站后又往回走。就是这么一个过程,比较简单。
那这里有什么技术点呢?
一.WinForm嵌入WPF
二.WPF里的动画
以上就是本篇文章的两个技术点,我附上源码(当然没经过优化),想交流的朋友可以给我留言。
请到我的SkyDrive下载源码:https://skydrive.live.com/redir?resid=117DCE29D38D6587!1067&authkey=!ACRFf-nH6cPakT8