一千萬個為什麽

搜索

為什麽我的組合框會在itemssource更改時凍結?

Reporoduce的步驟:

當應用程序啟動時,打開組合框以生成項目。現在點擊“Click Me!”按鈕。在後面的代碼中,組合框的itemssource被更改。現在嘗試再次打開組合框。即使綁定集合中只有2個項目,組合框也會凍結至少5秒鐘。這只是一個測試應用程序。在我的實際應用中,有超過2項,滯後是無法忍受的。我試過虛擬化開關。沒什麽區別。

花了這麽長時間?我該如何解決?如果沒有直接修復,是否有解決方法?

XAML:

    
        
        <button Content="Click Me!" Click="btn_Click"></button>
    

碼:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
    }

    ObservableCollection junk1 = new ObservableCollection() {
        new Junk() { Junk1 = "jdkf", Junk2 = "fjdfkasjd;klfj" },
        new Junk() { Junk1 = "jfdk;a", Junk2 = "fjkdljf" } };

    ObservableCollection junk2 = new ObservableCollection() {
        new Junk() { Junk1 = "fjkdfhsdjk", Junk2 = "fdjkah;" },
        new Junk() { Junk1="", Junk2 = "asdfj" } };

    void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        this.cbo.ItemsSource = junk1;
    }

    private void btn_Click(object sender, RoutedEventArgs e)
    {
        if (this.cbo.ItemsSource == junk1)
            this.cbo.ItemsSource = junk2;
        else
            this.cbo.ItemsSource = junk1;
        this.cbo.UpdateLayout();
    }
}

public class Junk
{
    public string Junk1 { get; set; }
    public string Junk2 { get; set; }
}

最佳答案

看起來這是由調試器處理的大量第一次機會異常引起的。更長的解釋是在 MS論壇,請參閱接受的答案。如果單獨運行,相同的構建不會顯示任何明顯的延遲。

轉載註明原文: 為什麽我的組合框會在itemssource更改時凍結?