首先,我的代码是用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)
{ }
}
该功能是树木扫描。
我会赞美任何形式的帮助, 非常感谢!!
答案 0 :(得分:0)
您应该计算进度并在方法中设置ProgressBar.Value
。
例如,你有一个1到100的for循环。
for (int i = 0; i < 100; i ++)
{
//...
progressBar.Value = i;
}
您还可以使用Maximum
属性设置进度的最大值。
因此,对于从1到10的for循环,您可以将Maximum设置为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;
}