異步方式向WPF ListBox控件中一條一條添加記錄


向ListBox綁定數據源時,如果數據量過大,可能會使得程序卡死,這是就需要一條一條的向ListBox的數據源中添加記錄了,下面是個小Demo:

1.前台代碼,就是一個ListBox控件

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListBox x:Name="listBox"></ListBox>
    </Grid>
</Window>

2.后台代碼,就是不斷的向ListBox的綁定的數據源中添加記錄,這里只是添加了一個描述數字,不斷的調用委托添加數據,如果想停止添加數據時可以寫停止條件。

using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Threading;

namespace WpfApplication1
{
    /// <summary>
    ///     MainWindow.xaml 的交互邏輯
    /// </summary>
    public partial class MainWindow : Window
    {
        private ObservableCollection<string> _numberDescriptions;

        public MainWindow()
        {
            InitializeComponent();
            Loaded += MainWindow_Loaded;
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            _numberDescriptions = new ObservableCollection<string>();

            listBox.ItemsSource = _numberDescriptions;

            Dispatcher.BeginInvoke(DispatcherPriority.Background, new LoadNumberDelegate(LoadNumber), 1);
        }

        private void LoadNumber(int number)
        {
            _numberDescriptions.Add("Number " + number);
            Dispatcher.BeginInvoke(DispatcherPriority.Background, new LoadNumberDelegate(LoadNumber), ++number);
        }

        private delegate void LoadNumberDelegate(int number);
    }
}

3.效果圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM