将进度条与函数 C# 同步
本文关键字:函数 同步 | 更新日期: 2023-09-27 18:36:04
首先,我的代码是用Windows Form Application - C#编写的。
我需要执行一个方法(这是非常模块化的,它的运行时间取决于您在系统中使用的物理内存量),当此方法运行时,我想向用户显示一个进度条。我不知道如何将进度条与函数的运行时同步。
编辑:这是我的代码:
public SystemProp()
{
// Getting information about the volumes in the system.
this.volumes = getVolumes();
for (int i = 0; i <volumes.Length; i++)
{
// Create a txt file for each volume.
if (!System.IO.File.Exists(dirPath + volumes[i].Name.Remove(1) + @".txt"))
{
using (FileStream fs = File.Create(dirPath + volumes[i].Name.Remove(1) + @".txt"))
{
}
}
// Treescan function for each Volume.
TreeScan(volumes[i].Name);
}
}
private bool isSafe()
{ return true; }
private DriveInfo[] getVolumes()
{
DriveInfo[] drives = DriveInfo.GetDrives();
return drives;
}
private void TreeScan(string sDir)
{
try
{
foreach (string f in Directory.GetFiles(sDir))
{
using (FileStream aFile = new FileStream(dirPath + sDir.Remove(1) + @".txt", FileMode.Append, FileAccess.Write))
using (StreamWriter sw = new StreamWriter(aFile)) { sw.WriteLine(f); }
}
foreach (string d in Directory.GetDirectories(sDir))
{
TreeScan(d);
}
}
catch (Exception)
{ }
}
函数是树扫描。
我会感谢任何形式的帮助,谢谢!!
您应该计算进度并在方法中设置ProgressBar.Value
。
例如,您有一个从 1 到 100 的 for 循环。
for (int i = 0; i < 100; i ++)
{
//...
progressBar.Value = i;
}
您还可以使用 Maximum
属性设置进度的最大值。因此,对于从 1 到 10 的 for 循环,您可以将最大值设置为 10,并且不计算进度。
progressBar.Maximum = 10;
for (int i = 0; i < 10; i ++)
{
//...
progressBar.Value = i;
}
如果无法将方法拆分到可以更改进度值的不同阶段,则可以创建一个每秒滴答一次的计时器,并在 Tick 事件处理程序中更改进度值。为了根据运行时设置进度值,您可以使用Stopwatch
。计时器和秒表应在方法的开头启动。
Timer timer = new Timer();
Stopwatch stopwatch = new Stopwatch();
void Method()
{
timer.Start();
stopwatch.Start();
//...
}
private void Timer_Tick(object sender, EventArgs e)
{
var progress = CalculateProgress (); // calculate progress
progressBar.Value = progress;
// or
progressBar.Value = stopwatch.Elapsed.Seconds;
}