通过进度条反映动作进度
通过任务栏按钮图标的改变,我们可以反映应用程序的静态状态,那么有没有办法可以反映应用程序的动态状态?比如一个文件复制过程的进度?答案当然是肯定的。通过任务栏进度条,我们就可以实时动态地反映应用程序某个动作的当前进度或者是其执行状态。
还是回到我们的例子中,在即时通讯软件中,我们常常需要传送文件给其他联系人。文件传输是一个耗时的过程,我们可以利用任务栏进度条实时地反映这一过程,让用户了解当前的传送进度。另外,根据网络情况,文件传送还可能出现各种异常情况,比如连接超时等等。对于这些特殊状态,我们也可以在任务栏按钮中进行反应。
我们在主界面上添加一个计时器控件和一个按钮控件,然后将按钮控件的点击函数实现如下,以模拟用户的文件发送动作:
// 表示文件传送进度
int _percentFileCompleted;
private void sendFile_Click(object sender, EventArgs e)
{
// 设定计时器的时间间隔
sendFileTimer.Interval = 1000;
// 当计时器触发后,需要进行的处理
sendFileTimer.Tick += delegate
{
// 改变文件传送进度
_percentFileCompleted += 10;
// 当文件传送快完成时,我们模拟一个网络异常状态
// 这种事情,经常发生啊~~~~
if (_percentFileCompleted == 80)
{
// 停止计时器
sendFileTimer.Stop();
// 显示错误消息
MessageBox.Show("网络异常,文件传送失败 :-< ",
MessageBoxButtons.RetryCancel,
MessageBoxIcon.Error);
// 设置任务栏进度条的状态为"错误"状态
// 任务栏进度条将显示为红色
Windows7Taskbar.SetProgressState(Handle,
Windows7Taskbar.ThumbnailProgressState.Error);
// 清空进度
_percentFileCompleted = 0;
}
else
{
// 状态正常,根据文件传送进度设置进度条的值
Windows7Taskbar.SetProgressValue(Handle,
(ulong)_percentFileCompleted, (ulong)100);
}
};
// 启动计时器
sendFileTimer.Start();
}
现在,我们启动应用程序,点击"发送文件"按钮模拟文件的发送,我们可以看到,任务栏按钮上有进度条反映当前的文件发送状态,当进度到达80%的时候,会弹出消息框提示文件发送失败,进度条的颜色也会相应的变成红色,表示文件发送过程出错。
图6 任务栏进度条
"Jumplist,缩略图,状态提示",拥有了这诸般武艺,任务栏成了众人瞩目的焦点。