首页 > 学院 > 开发设计 > 正文

【C#/WPF】用System.Timers.Timer计时器做浮窗广告

2019-11-06 08:31:49
字体:
来源:转载
供稿:网友

需求:鼠标静止一段时间后,显示浮窗广告。

思路:界面XAML写好一个专门显示浮窗广告的Canvas,先设为不可见Visibility=”Collapsed”,然后用System.Timers.Timer类做计时器,设置该timer每秒钟重复运行一次(检测一次),给计数器自增并判断是否累计达到要显示广告的时间,要显示则修改为Visibility=”Visible”。界面绑定鼠标的移动事件为重置该计数器。广告右上角是关闭按钮,点击按钮修改回Visibility=”Collapsed”即可。

关键代码如下:

前台:

<!-- 浮窗广告:主界面鼠标静止一段时间后,显示该广告 --><Canvas x:Name="adCanvas" Width="400" Height="200" Visibility="Collapsed"> <!-- 关闭按钮 --> <Button Command="{Binding CloseAdCanvasCommand}" Canvas.Right="0" Canvas.Top="0"> <Image Source="/HomeDecorationPSD;component/PResentation/Resources/Images/tool_button4.png" /> </Button></Canvas>

控制层关键代码

// 静止多少秒显示广告,写在了配置文件里float adIntervalTime = float.Parse(ConfigurationManager.AppSettings["AD_WINDOW_INTERVAL_TIME"]);#region 一段时间鼠标静止,浮窗广告// 主界面鼠标移动事件。一段时间鼠标不移动,则浮窗广告private void MouseMoveCommand(){ adStopTime = 0; // 重置计时器}// 开始浮窗广告的计时private void StartAdWindowTimer(){ Timer timer = new Timer(); timer.Elapsed += new ElapsedEventHandler(TimerTick); timer.Interval = 1000; // 每1秒重复检测一次 timer.Enabled = true;}// 计算是否要显示浮窗广告private void TimerTick(object sender, EventArgs e){ adStopTime++; if (adStopTime >= adIntervalTime && allowADShow) { adCanvasChangeVisibility(true); allowADShow = false; }}// 改变浮窗广告Canvas的显隐private void adCanvasChangeVisibility(bool visible){ App.Current.Dispatcher.Invoke((Action)delegate // <--- HERE { if (visible) adCanvas.Visibility = Visibility.Visible; else adCanvas.Visibility = Visibility.Collapsed; });}// 初始化浮窗广告private void InitAdCanvas(){ adCanvas = shellWindow.adCanvas; adCanvasChangeVisibility(false); // 背景是广告图片 ImageBrush brush = new ImageBrush(); brush.ImageSource = new BitmapImage(new Uri("pack://application:,,,/HomeDecorationPSD;component/Presentation/Resources/Images/logo.jpg")); adCanvas.Background = brush;}// 关闭浮窗广告private void CloseAdCanvasCommand(){ adCanvasChangeVisibility(false); allowADShow = true;}#endregion

资料参考MSDN中System.Timers.Timer类的使用:

https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k(System.Timers.Timer);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5);k(DevLang-csharp)&rd=true
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表