C# 进度条将不会完成
我有一个工人和一个进度条。进度条在视图中,辅助对象在模型中。 我想向用户显示进度条,以便他们知道需要等待多长时间。使所有结果完成填充 工作线程看起来像这样 模型 worker将信息发送到ProgressUpdated方法,我这样做是为了使用最终用户的可用数据更新UI 模型 再次完美地工作。 我的进度条值也是绑定的 XAML 我的想法是让酒吧打到100%完成,并变成绿色,以表明其已完成和消失/崩溃后3秒C# 进度条将不会完成,c#,wpf,multithreading,C#,Wpf,Multithreading,我有一个工人和一个进度条。进度条在视图中,辅助对象在模型中。 我想向用户显示进度条,以便他们知道需要等待多长时间。使所有结果完成填充 工作线程看起来像这样 模型 worker将信息发送到ProgressUpdated方法,我这样做是为了使用最终用户的可用数据更新UI 模型 再次完美地工作。 我的进度条值也是绑定的 XAML 我的想法是让酒吧打到100%完成,并变成绿色,以表明其已完成和消失/崩溃后3秒 有什么想法吗?我可以看出进度条未达到100%的两个可能原因。第一个原因很简单,因为当它到达那个
有什么想法吗?我可以看出进度条未达到100%的两个可能原因。第一个原因很简单,因为当它到达那个点时,你可能会把它藏起来,因此,你永远不会真正看到它 另一个可能的原因是,此计算从未达到您的最大极限值:
BGW.ReportProgress((index * 100) / Total, Metaclass["__CLASS"].ToString());
只有您可以验证这一点,但在实际计算中使用ints可能会损失一些精度。。。我知道ReportProgress方法使用Dispatcher.BeginInvoke异步调用HideProgressBar。这将使窗口有机会重新绘制自身,以便在filal状态下绘制进度条时执行Thread.Sleep3000。Dispatcher.BeginInvokenew操作=>HideProgressBar;我假设您正在谈论在public void ProgressBar_WMI_ValueChangedobject sender RoutedEventTarget方法中使用Dispatcher,我已经更新了代码,但仍然遇到问题。如果ProgressBar_WMI.Value==ProgressBar_WMI.Maximum,我指示在达到最大值之前不执行所述操作。使用断点表示该值=最大值。
public void Workers_Changed(object sender, ProgressChangedEventArgs e)
{
Progress = e.ProgressPercentage;
switch (TaskToRun)
{
case "NameSpace":
{
BaseClasses.Add(e.UserState.ToString());
if (Progress == 100) { Thread.Sleep(200); }
break;
}
case "Class":
{
return;
}
}
}
<ProgressBar Height="20" Name="ProgressBar_WMI"
Value="{Binding Progress,Mode=OneWay}"
DockPanel.Dock="Top"
Minimum="1"
Maximum="100" Foreground="Red" ValueChanged="ProgressBar_WMI_ValueChanged" />
public void HideProgressBar()
{
Thread.Sleep(3000);
ProgressBar_WMI.Visibility = Visibility.Collapsed;
}
public void ProgressBar_WMI_ValueChanged(object sender, RoutedEventArgs e)
{
if (ProgressBar_WMI.Value == ProgressBar_WMI.Maximum)
{
ProgressBar_WMI.Foreground = Brushes.Green;
HideProgressBar();
}
else {
ProgressBar_WMI.Foreground = Brushes.Red;
ProgressBar_WMI.Visibility = Visibility.Visible;
}
}
BGW.ReportProgress((index * 100) / Total, Metaclass["__CLASS"].ToString());