• 欢迎访问,如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

ProgressBar 的进度显示不准确问题

.Net技术 码拜 3年前 (2017-04-25) 284次浏览
ProgressBar 的进度显示不准确问题
本人把获取的文件长度赋给ProgressBar 作为它的长度,但是但是本人发现path.Length这个长度不包含子文件的内容,造成进度条不准确的问题,哪位高手能给指点一下
代码如下:
private void MetroWindow_Drop(object sender, DragEventArgs e)
{
string path;
path = ((Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
DirectoryInfo dir = new DirectoryInfo(path);

ProgressBarWindows pw = new ProgressBarWindows(path.Length);
Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait;
pw.Show();
FindFile(dir , pw);
Mouse_Selected_Click(sender, e);
pw.Close();
Mouse.OverrideCursor = System.Windows.Input.Cursors.Arrow;
}
在线等,谢谢

解决方案

5

不是很懂 path不就是个文件路径字符串吗 你取它的长度做什么 为什么包括子文件内容?

5

引用:

不是很懂 path不就是个文件路径字符串吗 你取它的长度做什么 为什么包括子文件内容?

是的,不知道lz怎么想的?
本人看你是找文件?以文件个数来作为进度?

10

引用:
Quote: 引用:

不是很懂 path不就是个文件路径字符串吗 你取它的长度做什么 为什么包括子文件内容?

是的,不知道lz怎么想的?
本人看你是找文件?以文件个数来作为进度?

这种做得越简单越好

55

引用:
Quote: 引用:

不是很懂 path不就是个文件路径字符串吗 你取它的长度做什么 为什么包括子文件内容?

本人是这样想的把总长度设定为文件路径的总长度并分为100,每完成一个路径进度相应增加,直到完成全部内容

文件路径的总长度?
你是要用户选择文件总数量吧?
那么int length=((Array)e.Data.GetData(DataFormats.FileDrop)).Length;

5

引用:
Quote: 引用:
Quote: 引用:
Quote: 引用:

不是很懂 path不就是个文件路径字符串吗 你取它的长度做什么 为什么包括子文件内容?

本人是这样想的把总长度设定为文件路径的总长度并分为100,每完成一个路径进度相应增加,直到完成全部内容

文件路径的总长度?
你是要用户选择文件总数量吧?
那么int length=((Array)e.Data.GetData(DataFormats.FileDrop)).Length;

按照你说的做,上来就是百分之百了ProgressBar 的进度显示不准确问题
这是ProgressBar的代码:
public partial class ProgressBarWindows : Window
{
int num;
int cur;
DispatcherTimer timer = null;
Random rnd;
public ProgressBarWindows(int n)
{
InitializeComponent();
num = n;
cur = 0;
ctl_progressBar.Maximum = n * 100;
rnd = new Random();
timer = new DispatcherTimer();
timer.Tick += new EventHandler(Timer_Tick);
timer.Interval = new TimeSpan(0, 0, 0, 0, 1);
timer.Start();
}
public void Add()
{
cur++;
ctl_progressBar.Value = cur * 100;
int np = (int)(ctl_progressBar.Value * 100 / ctl_progressBar.Maximum);
ctl_text.Content = np + “%”;
App.DoEvents();
}
private void Grid_Loaded(object sender, RoutedEventArgs e)
{
}
public void Timer_Tick(object sender, EventArgs e)
{
int max = (cur + 1) * 100;
ctl_progressBar.Value = rnd.Next((int)ctl_progressBar.Value, (int)(max + ctl_progressBar.Value) / 2);
ctl_text.Content = (int)(ctl_progressBar.Value * 100 / ctl_progressBar.Maximum) + “%”;
App.DoEvents();
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
timer.Stop();
}
}
}

不清楚搞个interval是1ms的Timer来操作做什么,里面还用随机数
假如只是5个文件 那就只有0,20%,40%,60%,80%,100%几种状态
要想让Progressbar平滑增长,那还得取出全部文件的长度,每处理一段文件块,就增长一次


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明ProgressBar 的进度显示不准确问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)