我正在动态地填充列表视图项目。同时我想展示一个进度条。填充数据时,应禁用进度栏。如何实现这一点。 我是WPF中的新成员。如何在WPF中的不同线程中运行进度条?
0
A
回答
4
您可以使用BackgroundWorker类,它可以在使用WPF时简化对后台线程的处理。 网上有很多这方面的例子。这里有两个从CodeProject,但它很容易找到更多的例子:
http://www.codeproject.com/Tips/83317/BackgroundWorker-and-ProgressBar-demo.aspx http://www.codeproject.com/KB/cpp/BackgroundWorker_Threads.aspx
1
我希望通过演示模型来控制视图状态。当视图需要将地址中的项目填充到演示模型时,该演示模型将启动工作线程并在UI同步上下文中更新其进度值。
public class SampleModel : ObservableObject
{
private ObservableCollection<string> _items = new ObservableCollection<string>();
public IEnumerable<string> Items
{
get
{
return this._items;
}
}
private int _progress;
public int Progress
{
get
{
return this._progress;
}
set
{
if (this._progress != value)
{
this._progress = value;
this.OnPropertyChanged("Progress");
}
}
}
public void Fill()
{
this.Progress = 0;
var sc = SynchronizationContext.Current;
new Thread(new ThreadStart(() =>
{
for (int i = 0; i < 100; i++)
{
sc.Post(p =>
{
this._items.Add(i.ToString());
this.Progress ++;
}, null);
Thread.Sleep(100);
}
sc.Post(p =>
{
this.Progress = 0;
}, null);
}))
.Start();
}
}
XAML:
<DockPanel>
<ProgressBar Minimum="0"
Maximum="100"
Height="50"
Value="{Binding Progress}"
DockPanel.Dock="Top">
<ProgressBar.Style>
<Style TargetType="ProgressBar">
<Setter Property="IsEnabled"
Value="True"/>
</Style>
</ProgressBar.Style>
</ProgressBar>
<Button Name="Start"
DockPanel.Dock="Top">Start</Button>
<ListView Name="List"
ItemsSource="{Binding Items}"/>
</DockPanel>
而后面的代码:
public MainWindow()
{
InitializeComponent();
this.Model = new SampleModel();
this.Start.Click += new RoutedEventHandler(Start_Click);
}
void Start_Click(object sender, RoutedEventArgs e)
{
this.Model.Fill();
}
protected SampleModel Model
{
get
{
return (SampleModel)this.DataContext;
}
set
{
this.DataContext = value;
}
}
相关问题
- 1. 如何使进度条在C#中的不同线程中运行
- 2. 线程运行在c#(wpf)时刷新进度条
- 3. 进度条线程在执行后不中止,应用程序崩溃-WPF
- 4. 如何在单独的线程中运行dask.distributed的进度条小部件?
- 5. 在Matlab中添加不同长度的线条进行绘制
- 6. 在另一个线程中运行进度条
- 7. 如何停止在android中使用线程运行的进度条?
- 8. 在Java的不同线程中运行后台进程
- 9. 如何控制在不同内核中运行的不同进程的进程
- 10. 在Python中运行不同的线程
- 11. 不同颜色的WPF进度条
- 12. 如何在不同线程的循环中运行另一个进程
- 13. 如何在不同的线程中运行监听器或在不同的线程中执行计算
- 14. 如何在WPF进度条中Indeterminate =“True”时显示进度?
- 15. 如何在不同线程中同时运行多个QDialog?
- 16. 在命令行java进度条[线程]
- 17. 如何检查线程已完成,然后在C#/ WPF中填写进度条
- 18. 如何更改进度条中“进度线”的高度?
- 19. 如何在Java中运行不同的线程?
- 20. 如何在java中执行mysql查询时运行进度条?
- 21. vb.net中的进度条线程
- 22. 如何在Android进程中获取正在运行的线程?
- 23. wpf中挂着进度条?
- 24. 如何设置WCF线程以进行不同的调度
- 25. 如何使运行的活动,同时禁止进度条在Java中的Android
- 26. 当进度条正在运行时阻塞线程
- 27. 如何在python中独立运行不同的子进程?
- 28. 如何增加在我的进程中运行的线程数?
- 29. 如何在不同内核上运行不同的线程?
- 30. 长时间运行WCF服务的WPF应用程序中的进度条
但是,当我访问在后台工作的控件,它抛出异常:调用线程不能因为不同的访问这个对象线程拥有它。 – Sandy 2011-02-02 08:35:52