这里,我们并不关注文件选择、文件复制这些操作是如何完成的,我们把关注的重点放在如何新建一个性能计数器并对文件复制过程进行监控。为了便于使用,我们新创建一个类FileCopyPerformanceCounters来封装相关的自定义性能计数器。在Visual Studio 2010中,我们将这个类实现如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// 为了使用计数器所需要引入的名字空间
using System.Diagnostics;
namespace FileCopier
{
// 文件复制性能计数器
public static class FileCopyPerformanceCounters
{
// 计数器成员
// 用于记录已经复制的文件数和当前进度百分比
private static PerformanceCounter totalFilesCounter;
private static PerformanceCounter percentDoneCounter;
public static void Initialize()
{
// 创建新的计数器数据并添加到计数器数据集合中
CounterCreationDataCollection counters =
new CounterCreationDataCollection();
CounterCreationData counter = new CounterCreationData(
"Total Files Copied",
"Total number of files copied by the application.",
PerformanceCounterType.NumberOfItems32);
counters.Add(counter);
counter = new CounterCreationData(
"% Files Copied",
"Percent of files copied in the current operation.",
PerformanceCounterType.NumberOfItems32);
counters.Add(counter);
// 创建新的自定义性能计数器类别
// 这个类别收集之前定义的计数器数据集合
if (PerformanceCounterCategory.Exists("FileCopier"))
PerformanceCounterCategory.Delete("FileCopier");
PerformanceCounterCategory.Create(
"FileCopier",
"Instrumentation of the FileCopier application.",
PerformanceCounterCategoryType.SingleInstance,
counters);
// 创建新的性能计数器
// 相应的数据保存在之前定义的计数器数据集合中
totalFilesCounter = new PerformanceCounter(
"FileCopier", "Total Files Copied", false);
percentDoneCounter = new PerformanceCounter(
"FileCopier", "% Files Copied", false);
}
// 更新已经复制的文件数
public static void UpdateTotalFiles(int totalFiles)
{
// 更新计数器的值
totalFilesCounter.RawValue = totalFiles;
}
// 更新复制进度百分比
public static void UpdatePercentDone(int percentDone)
{
// 更新计数器的值
percentDoneCounter.RawValue = percentDone;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
// 为了使用计数器所需要引入的名字空间
using System.Diagnostics;
namespace FileCopier
{
// 文件复制性能计数器
public static class FileCopyPerformanceCounters
{
// 计数器成员
// 用于记录已经复制的文件数和当前进度百分比
private static PerformanceCounter totalFilesCounter;
private static PerformanceCounter percentDoneCounter;
public static void Initialize()
{
// 创建新的计数器数据并添加到计数器数据集合中
CounterCreationDataCollection counters =
new CounterCreationDataCollection();
CounterCreationData counter = new CounterCreationData(
"Total Files Copied",
"Total number of files copied by the application.",
PerformanceCounterType.NumberOfItems32);
counters.Add(counter);
counter = new CounterCreationData(
"% Files Copied",
"Percent of files copied in the current operation.",
PerformanceCounterType.NumberOfItems32);
counters.Add(counter);
// 创建新的自定义性能计数器类别
// 这个类别收集之前定义的计数器数据集合
if (PerformanceCounterCategory.Exists("FileCopier"))
PerformanceCounterCategory.Delete("FileCopier");
PerformanceCounterCategory.Create(
"FileCopier",
"Instrumentation of the FileCopier application.",
PerformanceCounterCategoryType.SingleInstance,
counters);
// 创建新的性能计数器
// 相应的数据保存在之前定义的计数器数据集合中
totalFilesCounter = new PerformanceCounter(
"FileCopier", "Total Files Copied", false);
percentDoneCounter = new PerformanceCounter(
"FileCopier", "% Files Copied", false);
}
// 更新已经复制的文件数
public static void UpdateTotalFiles(int totalFiles)
{
// 更新计数器的值
totalFilesCounter.RawValue = totalFiles;
}
// 更新复制进度百分比
public static void UpdatePercentDone(int percentDone)
{
// 更新计数器的值
percentDoneCounter.RawValue = percentDone;
}
}
}
在这段代码中,我们在类中包装了两个性能计数器totalFilesCounter和percentDoneCounter,分别用于记录已经复制的文件数和复制进度的百分比。在类的初始化函数中,我们完成了这两个自定义性能计数器的创建工作。