我在处理 ProgressBar 的工作时遇到麻烦。
XAML:
IProgressModel:
实施:
而且非常直接的PropertyChanged机制:
进度条一开始就是“满”的,并在整个过程中保持这种状态。我已经阅读了所有相关的SO帖子,但没有运气。我做错了什么吗?提前感谢您。
XAML:
<ProgressBar x:Name="ProgressBar" Value="{Binding Progress, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Height="37" Margin="10,35,0,0" VerticalAlignment="Top" Width="590"/>
后台代码:
ProgressBar.DataContext = progressModel;
IProgressModel:
public interface IProgressModel
{
double Minimum { get; set; }
double Maximum { get; set; }
double Progress { get; }
}
实施:
private void WorkerOnDoWork(object sender, DoWorkEventArgs doWorkEventArgs)
{
Minimum = 0;
Maximum = RenamableFiles.Count;
var i = 0;
foreach (var renamableFile in RenamableFiles)
{
var oldFilename = ReCreateOldFileName(renamableFile);
var renameProposalFilename = CreateNewFileName(renamableFile);
if (oldFilename != null && renameProposalFilename != null && !oldFilename.Equals(renameProposalFilename))
{
// File.Move(oldFilename, renameProposalFilename);
Thread.Sleep(100);
Progress = i++;
}
}
}
而且非常直接的PropertyChanged机制:
private double _progress;
public double Progress
{
get { return _progress; }
set
{
_progress = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
进度条一开始就是“满”的,并在整个过程中保持这种状态。我已经阅读了所有相关的SO帖子,但没有运气。我做错了什么吗?提前感谢您。
WorkerOnDoWork
在除UI线程之外的线程上运行。如果是这样,我认为这不是很安全,因为你将有两个线程访问同一件事情。 - Steve