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

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

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

关键代码如下:

前台:

控制层关键代码

// 静止多少秒显示广告,写在了配置文件里

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 //

{

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:,,,/项目名;component/Presentation/Resources/Images/logo.jpg"));

adCanvas.Background = brush;

}

// 关闭浮窗广告

private void CloseAdCanvasCommand()

{

adCanvasChangeVisibility(false);

allowADShow = true;

}

#endregion

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

2018.3.12更新:

另一种思路,用AutoResetEvent控制线程的阻塞、唤醒。

private voidTestTimer()

{

AutoResetEvent autoResetEvent= new AutoResetEvent(false);int limit = 5;int index = 0;while (!autoResetEvent.WaitOne(TimeSpan.FromSeconds(3))) //每隔3秒钟执行一次循环体

{

index++;

Console.WriteLine("index =" +index);if (index >=limit)

{

autoResetEvent.Set();//跳出循环体

}

}

Console.WriteLine("Thread got signal");

}

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值