基于WPF的LED显示系统的设计与实现

时间:2022-10-01 11:15:43

基于WPF的LED显示系统的设计与实现

摘要:利用WPF技术可以开发出具有效果绚丽、功能强大、容易部署的应用程序。该文提出了一种基于WPF技术快速高效的开发LED显示系统的方案,该系统利用WPF丰富的UI框架及用户自定义控件,通过多线程和控件组合的方式,实现了简单便捷的数据维护和多种显示模式的动态组合和加载。

关键词:WPF;LED显示;多线程控制

中图分类号:TP315文献标识码:A文章编号:1009-3044(2012)13-3068-03

The Design and Implementation of LED Display System Based on WPF

JIANG Yong-ming, ZHANG Zhong-gui, LV Gang

(Petrochina Qinghai Oilfield Company, Dunhuang 736202, China)

Abstract: We use Microsoft WPF technology that we can develop with colorful, powerful, simple to deploy application. This paper proposes a fast and efficient solution of LED display system based on WPF technology. The sytem with extensive UI framework and user custom control of WPF. that use multithreading and control group to enable simple convenient data and loaded dynamic combination and maintain, and various display modes.

Key words: WPF; LED display; multithreaded control

目前,LED大屏幕产品所支持的通用显示系统在操作和使用上都具有一定专业性,在显示内容上局限性较大。该文提出了一种基于WPF技术开发的LED显示系统,通过外部Windows应用程序接口实现了定制数据在大屏幕中的显示,不但丰富了显示内容,实现了内容的定制,还降低了系统维护的难度,提高了系统操作的时效性。

1系统整体概述

1.1系统总体架构

本文设计的显示系统的总体结构如图1所示,该系统主要分为系统显示和数据维护两部分。

图1显示系统的总体结构图

1.2系统显示模块

显示模块的设计主要采用了用户控件组合的技术实现。将显示内容根据业务类别划分为不同的栏目,并以不同的控件予以实现,再根据不同的显示需求将已经设计好的栏目控件用布局控件进行组合排列组成模式控件。下图是用StackPanel顺序容器排列组合栏目控件的代码示例。

图2用户控件组合

1.3数据维护模块

该模块从功能上分为数据和控制两部分,数据部分为各栏目数据的维护,控制部分为设定模式的启用状态、显示频率、模式起始时间、优先级等信息。通过以上两个部分实现动态加载显示数据和动态切换加载显示模式的目的。

2数据库设计

数据结构设计方面,分为栏目数据表、栏目控制表、模式控制表。栏目数据表用于存储栏目基础数据,包括分组名称、显示内容、添加时间、描述信息等字段,解决了多种栏目数据的存储问题。栏目控制表包括栏目名称、分组名称、描述信息等字段,用于存储要在大屏幕中显示的栏目分组数据,它是栏目数据表的关系表。模式控制表包括模式名称、启用状态、显示频率、模式起始时间等字段,用于存储模式信息。扩展应用只需在栏目数据表部分加入新表,构建与栏目控制表的关系,即可完成扩展开发的数据结构设计,从而达到新的业务需求。

表1模式控制表

3关键技术

3.1数据显示

各栏目数据按用途在维护时进行分组,通过栏目控制可以定制要在各模式中使用的栏目分组数据。在模式控制中,设置模式的显示频率,显示频率分为定时显示、定时重复显示、重复显示。遍历模式控制表,将显示频率为重复的记录添加到临时集合中,接着将定时重复的记录添加到临时集合中,最后将定时的记录添加到临时集合,使用时,取临时集合的最后一条记录,利用反射动态加载显示模式,可得到显示模式的优先级,即定时显示>定时重复>定时。反射加载显示模式关键代码如下:

System.Windows.Controls.UserControl uc;

System.Reflection.Assembly assembly;

private void Window_Loaded(object sender, RoutedEventArgs e)

{

assembly = System.Reflection.Assembly.Load(…模式程序集名…);

if (assembly == null)

{

MessageBox.Show("程序集名称错误!");

return;

}

uc = assembly.CreateInstance(…模式类名…) as UserControl;

if (uc == null)

{

MessageBox.Show("模式类名错误!");

return;

}

MainWindow.ContentControl.Content = uc;

}

3.2线程控制

WPF应用程序在运行过程中,UI线程接收输入、处理事件、绘制屏幕以及运行应用程序代码,如果运行时间过长,会造成内存使用率不断上升、CUP占用率提高,导致系统总体性能降低,必须对内存及时释放来解决以上问题。以三栏式模式为列,关键代码如下:

private void UserControl_Loaded(object sender, RoutedEventArgs e)

{ //小标语控件

//定义栏目切换计时器

timerLoadData = new System.Windows.Threading.DispatcherTimer();

//设置计时器间隔时间

timerLoadData.Interval = new TimeSpan(0,0,20);

//超过计时器间隔的事件

timerLoadData.Tick += timerLoadData_Tick;

//启动计时器

timerLoadData.Start();

//定义小标语加载计时器

timerSwitch = new System.Windows.Threading.DispatcherTimer();

timerSwitch.Interval = new TimeSpan(0, 0, 2);

timerSwitch.Tick += timerSwitch_Tick;

timerSwitch.Start();

} private void timerSwitch_Tick(object sender, EventArgs e)

{…代码省略}

private void timerLoadData_Tick(object sender, EventArgs e)

{…代码省略}

三栏式模式由页眉控件、小标语控件、页脚控件组成,当程序加载此模式时,要对各控件的线程进行释放,关键代码如下:

private void Window_Loaded(object sender, RoutedEventArgs e)

{

//用户控件计时器控制

//停止栏目切换时器

modeSmallSlogan.sectionSmallSlogan.timerSwitch.Stop();

//停止栏目加载计时器

modeSmallSlogan.sectionSmallSlogan.timerLoadData.Stop();

modeSmallSlogan.sectionSmallSlogan.timerSwitch.Tick -=

modeSmallSlogan.sectionSmallSlogan.timerSwitch_Tick;

modeSmallSlogan.sectionSmallSlogan.timerLoadData.Tick -=

modeSmallSlogan.sectionSmallSlogan.timerLoadData_Tick;

}

4结束语

系统的实现采用了WPF技术,尤其是以用户控件组合的方式解决了显示内容的动态扩展和加载,以及在多LED屏的环境下通过网络连接实现同源同步的显示等问题,并可通过扩展新栏目和组合新的显示模式从而丰富显示内容的目的,更利于对未知业务的扩展,彻底改变了传统显示系统操作复杂、局限性大等缺陷,使得企业可以根据展示和宣传的需要进行定制开发,甚至可以集成现有业务系统的数据予以展现,更加符合企业自身的需求。

参考文献:

[1] Watson K, Nagel C.C#入门经典[M]. 4版.北京:清华大学出版社,2008:961-985.

[2] WPF线程:使用调度程序构建反应速度更快的应用程序[EB/OL].msdn.省略/zh-cn/magazine/cc163382.aspx/.

[3] MacDonald M. WPF编程宝典――使用C#2008和.NET 3.5[M].北京:清华大学出版社,2009:441-623.

[4]王少葵.深入解析WPF编程[M].北京:电子工业出版社,2008:151-236.

上一篇:计量全自动生产作业系统建设的研究 下一篇:高校计算机基础教学改革的思考与实践