我正在動態地填充列表視圖項目。同時我想展示一個進度條。填充數據時,應禁用進度欄。如何實現這一點。 我是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. 如何在WPF進度條中Indeterminate =「True」時顯示進度?
- 13. 如何在不同的線程中運行監聽器或在不同的線程中執行計算
- 14. 如何在後臺運行進度條?
- 15. 在不同線程中運行任務
- 16. 如何在不同線程中同時運行多個QDialog?
- 17. 如何檢查線程已完成,然後在C#/ WPF中填寫進度條
- 18. 在命令行java進度條[線程]
- 19. 線程進度條
- 20. 如何更改進度條中「進度線」的高度?
- 21. 同時在內部運行線程執行進度條僅顯示方法的進程執行
- 22. Android如何在不同的線程中運行服務
- 23. 如何在Java中運行不同的線程?
- 24. 如何在servlet中運行不同的線程?
- 25. 如何在java中執行mysql查詢時運行進度條?
- 26. wpf中掛着進度條?
- 27. Android中的線程進度條
- 28. vb.net中的進度條線程
- 29. 「Destroy」進度條中的線程
- 30. 如何在Android進程中獲取正在運行的線程?
但是,當我訪問在後臺工作的控件,它拋出異常:調用線程不能因爲不同的訪問這個對象線程擁有它。 – Sandy 2011-02-02 08:35:52