实现的效果是往集合类里面添加一条数据,控件上就显示一条数据;
xaml ================================
<Window x:Class="ThreadedWpfExplorer.Window2"
Loaded="Window_Loaded"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window2" Height="300" Width="300">
<Window.Resources>
<DataTemplate x:Key="listBoxTemplate">
<TextBlock Text ="{Binding Name}"
Padding="2" FontFamily="宋体" FontWeight="Normal" FontSize="12px" />
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox Name="lst" Margin="0,68,0,0" ItemTemplate="{StaticResource listBoxTemplate}">
</ListBox>
<Button Content="Button" Height="27" HorizontalAlignment="Left" Margin="12,12,0,0" Name="button1" VerticalAlignment="Top" Width="78" Click="button1_Click" />
</Grid>
</Window>
cs ===================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace ThreadedWpfExplorer
{
/// <summary>
/// Window2.xaml 的交互逻辑
/// </summary>
public partial class Window2 : Window
{
public Window2()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
}
private void button1_Click(object sender, RoutedEventArgs e)
{
List<Employee> _employees = new List<Employee>();
for (int i = 0; i < 100; i++)
{
Employee temp = new Employee();
temp.name = "aaa" + i.ToString();
_employees.Add(temp);
}
lst.ItemsSource = _employees;
}
}
public class Employee
{
public string name=string.Empty ;
public string Name
{
get { return name; }
set { name=value ;}
}
}
}
//-----------------------------------------------------------------------
ThreadPool.QueueUserWorkItem(delegate
{
for (int i = 0; i <= 100 && Application.Current != null; i++)
{
Application.Current.Dispatcher.BeginInvoke((Action)delegate
{
Employee temp = new Employee();
temp.name = "aaa" + i.ToString();
_employees.Add(temp);
lst.SelectedItem = temp;
lst.ScrollIntoView(temp);
});
Thread.Sleep(100);
}
});
用多线程处理能实现想要的效果;